n皇后问题:
问题描述:一开始我理所当然的觉得n皇后就用n个for循环代表每一行皇后的位置就行。。。果然太年轻了我。实际上,用两个for循环代表代表行列,第二个for循环的i值为第一个for循环的i+1,这样直接就避免了行列不相同,那么一个皇后的十字型区域就避免了,只需判断斜线部分,自然就是列数加一或减一啦,嗯…代码如下:
#include "pch.h"
#include <iostream>
#include <cstdio>
using namespace std;
int ans[10];
bool b[10];
void out() {
int i, j;
for (i = 1;i <= 7;i++)
for (j = i + 1;j <= 8;j++)
if (i - j == ans[i] - ans[j] || ans[j] - ans[i]) return;
for (i = 1;i <= 8;i++)
cout << "(" << i << "," << ans[i] << ")" << endl;
cout << endl;
}
void dfs(int Num) {
if (Num >= 9) { out();return; }
int i;
for (i = 1;i <= 8;i++) {
if (b[i] == false) {
b[i] = true;
ans[Num] = i;
dfs(Num + 1);
ans[Num] = 0;
b[i] = false;
}
}
}