N皇后问题
题目描述
在N*N的棋盘上放置N个皇后(n<=10)而彼此不受攻击(即在棋盘的任一行,任一列和任一对角线上不能放置2个皇后),编程求解所有的摆放方法。
输入
输入:
n
输出
每行输出一种方案,每种方案顺序输出皇后所在的列号,每个数占5列(输出时按字典序)。若无方案,则输出no solute!
样例输入
4
样例输出
2 4 1 3
3 1 4 2
看起来题目描述不长,可是还是有难度 ,对于我来说不成问题。
源代码:
#include<iostream>
using namespace std;
bool r[101],p[101],k[101];
int put[101],ans=0,n;
void input() {
cin>>n;
}
void print(int d) {
ans++;
for(int i=1; i<=n; i++) printf("%5d",put[i]);
cout<<endl;
}
void search(int dep) {
if(dep>n) {
print(dep-1);
return;
} else for(int i=1; i<=n; i++)
if(r[i]==false&&p[dep+i]==false&&k[dep-i+n]==false) {
r[i]=true;
p[dep+i]=true;
k[dep-i+n]=true;
put[dep]=i;
search(dep+1);
r[i]=false;
p[dep+i]=false;
k[dep-i+n]=false;
}
}
int main() {
input();
search(1);
if(ans==0) {
cout<<"no solute!"<<endl;
}
}