Description
| | |
| 在n×n 格的棋盘上放置彼此不受攻击的n 个皇后。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n后问题等价于在n×n格的棋盘上放置n个皇后,任何2个皇后不放在同一行或同一列或同一斜线上。 设计一个解n 后问题的回溯算法,计算在n*n个方格上放置彼此不受攻击的n个皇后的一个放置方案。 | |
| | |
Input
Output
| | |
| 将计算出的彼此不受攻击的n个皇后的一个放置方案输出到屏幕。输出的第1行是n个皇后的放置方案。 | |
| | |
Sample Input
Sample Output
#include<iostream>
#include<cmath>
#include<stdlib.h>
using namespace std;
#define N 100
int x[N];
int n;
bool place(int t)
{
int i;
for(i=1;i<=t-1;i++)
{
if(abs(i-t) == abs(x[i]-x[t]) || x[i] == x[t])
return false;
}
return true;
}
void backtrack(int t)
{
int i;
if(t>n)
{
for(i=1;i<=n;i++)
cout<<x[i]<<" ";
cout<<endl;
exit(0);
}
else
{
for(i=1;i<=n;i++)
{
x[t]=i;
if(place(t))
backtrack(t+1);
}
}
}
int main()
{
int i;
while(cin>>n)
{
for(i=1;i<=n;i++)
x[i]=0;
backtrack(1);
}
return 0;
}