题目链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1213
【题目描述】
在国际象棋棋盘上放置八个皇后,要求每两个皇后之间不能直接吃掉对方。
【输入】
(无)
【输出】
按给定顺序和格式输出所有八皇后问题的解(见样例)。
【输入样例】
(无)【输出样例】
No. 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 No. 2 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 ...以下省略
#include<iostream> #include<cmath> using namespace std; int a[10],l=1; int b[10][10]; int check(int k) { for(int i=0;i<k;i++) { if(a[k]==a[i]||abs(a[k]-a[i])==abs(k-i)) return 0; } return 1; } void dfs(int r) { if(r==8) { cout<<"No. "<<l++<<endl; for(int i=0;i<8;i++) { for(int j=0;j<8;j++) { if(a[j]==i)//注意题目要求, cout<<1<<" "; else cout<<0<<" "; } cout<<endl; } return ; } for(int i=0;i<8;i++) { a[r]=i; if(check(r)==1) dfs(r+1); } } int main() { dfs(0); return 0; }