dfs.bfs
作者:
卡一哦
,
2022-03-07 22:02:15
,
所有人可见
,
阅读 206
bfs
排列数字:
if (结束条件) cout 方案;
for(0-n){
if (判断条件) {
状态转移
dfs 下一层
状态恢复
}
}
n-皇后
1.同排列数字
2.一步一步的走,不好想
结束条件
void dfs(int x, int y, int q) {
if (q > n) return;
if (y == n) {
y = 0;
x++;
}
if (x == n) {
if (q == n) {
for (int i = 0; i < n; i++) puts(g[i]);
puts("");
}
return;
}
//不放皇后
dfs(x, y + 1, q);
//放皇后
if (!col[y] && !row[x] && !dg[x + y] && !udg[y - x + n]) {
g[x][y] = 'Q';
col[y] = row[x] = dg[x + y] = udg[y - x + n] = true;
dfs(x, y + 1, q + 1);
g[x][y] = '.';
col[y] = row[x] = dg[x + y] = udg[y - x + n] = false;
}
}
bfs
最少步数
1.走迷宫
d[0] = 0;初始化
q.push入队
while(q.size()){
atuo t = q.front();
q.pop();
转移;
if (转移条件判断) {
状态转移
入队
恢复
}
}
2.8数码
string start;
string end;
queue<string> q;
unordered_map<string, int> d;
一样的操作bfs
要记住的是,一维向二维(3*3)转换
x = k / 3, y = k % 3;
k = 3 * x + b;