(姚*夫出版)
20分 | 1s | 64MByte |
作者 | 分数 | 时间限制 | 内存限制 |
---|---|---|---|
gznc | 20分 | 1s | 64MByte |
在 N*N 的棋盘上放置 N 个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上
不能放置 2 个皇后),编程求解所有的摆放方法。
输入
输入:n
输出
每行输出一种方案,每种方案顺序输出皇后所在的列号,各个数占5个字符。若无方案,则输出
no solute!
样例输入
4
复制
样例输出
2 4 1 3
3 1 4 2
样例代码:
#include<bits/stdc++.h>
using namespace std;
int a[11][11]={0};
int js=0;
int n;
int vis[15],vis1[30],vis2[30];
void mycout()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i][j]==1) cout<<setw(5)<<j;
}
}
cout<<endl;
}
void wc(int s)
{
for(int j=1;j<=n;j++)
{
if(vis[j]==0 && vis1[s+j-1]==0 && vis2[s-j+1]==0)
{
a[s][j]=1;
vis[j]=1;
vis1[s+j-1]=1;
vis2[s-j+1]=1;
if(s==n)
{
js++;
mycout();
}
else wc(s+1);
a[s][j]=0;
vis[j]=0;
vis1[s+j-1]=0;
vis2[s-j+1]=0;
}
}
}
int main()
{
cin>>n;
wc(1);
if(js==0)
cout<<"no solute!";
return 0;
}