#include #include const int N=20; //最多放皇后的个数 int q[N]; //各皇后所在的行号 int cont = 0; //统计解得个数 //输出一个解 void print(int n) { int i,j; cont++; printf("第%d个解:",cont); for(i=1;i<=n;i++) printf("(%d,%d) ",i,q[i]); printf("\n"); for(i=1;i<=n;i++) //行 { for(j=1;j<=n;j++) //列 { if(q[i]!=j) printf("x "); else printf("Q "); } printf("\n"); } } //检验第i行的k列上是否可以摆放皇后 int find(int i,int k) { int j=1; while(jn) print(n); else { for(j=1;j<=n;j++) //试探第k行的每一个列 { if(find(k,j)) { q[k] = j; place(k+1,n); //递归总是在成功完成了上次的任务的时候才做下一个任务 } } } } int main() { int n; printf("请输入皇后的个数(n<=20),n=:"); scanf("%d",&n); if(n>20) printf("n值太大,不能求解!\n"); else { printf("%d皇后问题求解如下(每列的皇后所在的行数):\n",n); place(1,n); //问题从最初状态解起 printf("\n"); } return 0; }
n皇后.cpp
猜你喜欢
转载自blog.csdn.net/niuageniuc/article/details/53022574
今日推荐
周排行