n皇后问题
题目:
输入皇后的个数n,输出所有皇后可能放置的位置,(不能同行,同列和同对角线)
样例
输入:4
输入:2 4 1 3
3 1 4 2
代码
#include<iostream>
using namespace std;
// q用来存放位置,n是皇后的个数
int q[100],n;
void search(int cur)
{
//皇后的位置放置完成
if(cur == n+1)
{
for (int i=1;i<=n;i++)
{
printf("%d ",q[i]);
}
printf("\n");
return;
}
// 遍历所有可以放的位置
for (int i=1;i<=n;i++)
{
int flag = 1;
q[cur] = i;
// 判断放在该位置是否可行,不能同列,同行,同对角线。
for (int j= 1;j<cur;j++)
{
if(q[cur] == q[j] || q[cur] - cur == q[j] - j ||cur + q[cur] == j + q[j])
{
flag = 0;break;
}
}
if(flag)
{
search(cur+1);
}
}
}
int main()
{
cin>>n;
search(1);
return 0;
}