项目介绍
求解n皇后问题-算法设计与分析报告C/C++版,下图讲解代码执行流程,以及详细代码注释
实例代码
//求解n皇后问题 //author:rgh #include <stdio.h> #include <stdlib.h> #define N 20 //最多皇后个数 int q[N]; //存放各皇后所在的列号,即(i,q[i])为一个皇后位置 int count=0; //累计解个数 void dispasolution(int n) //输出n皇后问题的一个解 { printf(" 第%d个解:",++count); for (int i=1;i<=n;i++) printf("(%d,%d) ",i,q[i]); printf("\n"); } bool place(int i,int j) //测试(i,j)位置能否摆放皇后 { if (i==1) return true; //第一个皇后总是可以放置 int k=1; while (k<i) //k=1~i-1是已放置了皇后的行 { if ((q[k]==j) || (abs(q[k]-j)==abs(i-k))) return false; k++; } return true; } void queen(int i,int n) //放置1~i的皇后 { if (i>n) dispasolution(n); //所有皇后放置结束 else { for (int j=1;j<=n;j++) //在第i行上试探每一个列j if (place(i,j)) //在第i行上找到一个合适位置(i,j) { q[i]=j; queen(i+1,n); } } } int main() { int n; //n为存放实际皇后个数 printf(" 皇后问题(n<20) n="); scanf("%d",&n); if (n>20) printf("n值太大,不能求解\n"); else { printf("%d皇后问题求解如下:\n",n); queen(1,n); //放置1~i的皇后 } }
© 版权声明
本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!
THE END