八皇后问题(回溯_排列树)
时限:1000ms 内存限制:10000K 总时限:3000ms
描述:
输出8皇后问题所有结果。
输入:
没有输入。
输出:
每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。
输入样例:
输出样例:
输出的前几行:
No 1:
A.......
....A...
.......A
.....A..
..A.....
......A.
.A......
...A....
No 2:
A.......
.....A..
.......A
..A.....
......A.
...A....
.A......
....A...
#include<stdio.h> #include<math.h> void NQueens(int m); bool canplace(int t); void print(); #define N 8 int Array[9]={0};//针对八皇后设的数组(Array[0]不用) int sum=0; int main() { NQueens(1); return 0; } void NQueens(int m)//m=1~8 { if(m>N) { sum++; print(); } else for(int i=1;i<=N;i++) { Array[m]=i; if(canplace(m)) NQueens(m+1); } } void print() { int i,j; printf("NO%d:\n",sum); for(i=1;i<=N;i++)//每一行 { for(j=1;j<=N;j++) { if(Array[i]==j) printf("A"); else printf("*"); } printf("\n"); } } bool canplace(int t)//第t行放上数后判断是否可行 { for(int i=1;i<t;i++) if(Array[i]==Array[t] ||abs(t-i)==abs(Array[t]-Array[i]) ) return false; return true; }
posted on 2012-07-08 18:32 IThinktan 阅读(1356) 评论(0) 编辑 收藏 举报