问题描述:在n*n的棋盘中摆放n个皇后,要求每个皇后不攻击,输出所有的解
输入:一个正整数n
输出:所有的解
例如:输入:4
输出:
2,4,1,3(输出的第1个数的数值x表示,该皇后放在第一行的第x列)
3,1,4,2
#include<iostream>
using namespace std;
int N;
int queenpos[100];
void fun(int k)//在0到k-1行皇后已经摆放好的情况下,摆放第k行及其后的皇后
{
int i;
if (k==N)//表明第k行皇后已摆放好
{
for ( i = 0; i < N; i++)
{
cout << queenpos[i] + 1 << " ";//输出皇后的位置,i+1代表皇后的位置行数
//queenpos[i]+1代表皇后的列数
}
cout << endl;
return;
}
for ( i = 0; i < N; i++)//逐步尝试第K个皇后的位置
{
int j;
for ( j = 0; j < k; j++)//和已经摆放好的K个皇后的位置比较,看是否冲突
{
if (queenpos[j]==i||abs(queenpos[j]-i)==abs(k-j))
{
break;//如果冲突则进行下一个测试
}
}
if (j == k)
{
queenpos[k] = i;
fun(k + 1);
}
}
}
int main()
{
cin >> N;
fun(0);
return 0;
}