问题:
n皇后问题:输入整数n, 要求n个国际象棋的皇后,摆在 n*n的棋盘上,互相不能攻击,输出全部方案。
#include <iostream>
using namespace std;
int N;
int queuePos[100];//用来描述每一个皇后所摆的列数
void NQueue(int k);
int main()
{
cin >> N;
NQueue(0);
getchar();
getchar();
return 0;
}
void NQueue(int k)
{
int i;
if (k==N) {
for (i = 0; i < N;i++) {
cout << queuePos[i] + 1 << ' ';
}
cout << endl;
}
for (i = 0; i < N;i++) {//在0~k-1行皇后摆放好的情况下,摆第k行及其后面的皇后,摆在第i列上
int j;
for (j = 0; j < k;j++) {//与前k-1个皇后进行比较
if (queuePos[j]==i||abs(queuePos[j]-i)==abs(k-j)) {//摆第k行皇后,与第j行皇后行号进行对比
break;
}
}
if (j==k) {//比较结束,列号写入,递归第k+1个皇后
queuePos[k] = i;
NQueue(k + 1);
}
}
}
其实递归就是另一种循环,因为不能写不定循环,所以用递归解决。