时限: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; }