【回溯】n皇后问题
时间限制: 1 Sec 内存限制: 128 MB提交: 8 解决: 7
[提交][状态][讨论版]
题目描述
在一个国际象棋棋盘上,放置n个皇后(n<10),使她们相互之间不能进攻。求出所有布局。
输入
一个整数n(0<n<10)
输出
每行输出一种方案,每种方案顺序输出皇后所在的列号,各个数之间用空格分隔。
样例输入
4
样例输出
2 4 1 3
3 1 4 2
#include <iostream> using namespace std; int a[10]={0},n; void dg(int i) { if(i>n) { for(int i=1;i<=n;i++) cout<<" "<<a[i]; cout<<endl; } else { for(int j=1;j<=n;j++) { int tag=1; for(int k=1;k<i;k++) { if(j==a[k]+i-k||j==a[k]||j==a[k]-i+k) { tag=0; break; } } if(tag) { a[i]=j; dg(i+1); } } } } int main() { cin>>n; dg(1); return 0; }