此题为搜索与回溯算法,简称dfs,定义上的深度优先搜索的思路与树的先序遍历非常相似,是针对图的搜索而提出的一种算法。
分析:
无输入,直接输出,为经典的八皇后问题,注意一下输出的格式,要输出 NO.1……
上code:
#include <iostream>
using namespace std;
const int N = 9;
int n = 8, cj = 1;
char ans[N][N];
bool col[N], dg[2 * N], udg[2 * N];
void dfs(int u) {
if (u == n) {
printf("No. %d\n", cj ++);
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++)
printf("%c ", ans[i][j]);
printf("\n");
}
return ;
}
for (int i = 0; i < n; i ++) {
if (!col[i] && !dg[u + i] && !udg[i - u + n]) {
col[i] = dg[u + i] = udg[i - u + n] = true;
ans[i][u] = '1';
dfs(u + 1);
col[i] = dg[i + u] = udg[i - u + n] = false;
ans[i][u] = '0';
}
}
}
int main() {
for (int i = 0; i < n; i ++) {
for (int j = 0; j < n; j ++) {
ans[i][j] = '0';
}
}
dfs(0);
return 0;
}