八皇后问题
来源:互联网 发布:js 设置div display 编辑:程序博客网 时间:2024/06/02 06:47
一直以为八皇后的问题是一个超级复杂的题目,可是这两天好好看了下递归、回溯的问题,发现其实实现起来还是比较容易的。所以,与大家分享一下。
代码:
#include <cstdio>#include <iostream>#include <cstdlib>using namespace std;int ans = 0;int f[8];//f[i]表示,第i+1行皇后的位置 void print(){int i, j;for(i=0; i<8; i++){for(j=0; j<8; ++j){if(f[i] == j)printf("1");elseprintf("0");printf(" ");}printf("\n");}printf("\n");}int EightQueen(int row){if(row >= 8){//如果成功,ans++,打印八皇后图 ans++;print();return 0;}else{int i, j;for(i=0; i<8; ++i){f[row] = i;int flag = 1;for(j=0; j<row; ++j){if(f[j] == f[row] || f[j]-j == f[row]-row || f[j]+j == f[row]+row){//如果存在危险,标志为0,继续找 flag = 0;break;}}if(flag){//如果本行没有危险,就向下一行寻找 EightQueen(row+1);}}}return 0;}int main(){EightQueen(0);cout << "一共多少种方法:" << ans << endl; return 0;}
同样,根据八皇后的解法,也可以推出n皇后的方法(n<=11),因为方法是递归,所以不宜很多层。
#include <cstdio>#include <iostream>#include <cstdlib>using namespace std;int ans = 0, n;int f[15];//f[i]表示,第i+1行皇后的位置 void print(){int i, j;for(i=0; i<n; i++){for(j=0; j<n; ++j){if(f[i] == j)printf("1");elseprintf("0");printf(" ");}printf("\n");}printf("\n");}int EightQueen(int row){if(row >= n){//如果成功,ans++,打印n皇后图 ans++;print();return 0;}else{int i, j;for(i=0; i<n; ++i){f[row] = i;int flag = 1;for(j=0; j<row; ++j){if(f[j] == f[row] || f[j]-j == f[row]-row || f[j]+j == f[row]+row){//如果存在危险,标志为0,继续找 flag = 0;break;}}if(flag){//如果本行没有危险,就向下一行寻找 EightQueen(row+1);}}}return 0;}int main(){while(~scanf("%d", &n)){EightQueen(0);cout << "一共多少种方法:" << ans << endl; } return 0;}
0 0
- 八皇后 n皇后 问题
- 八皇后N皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题(2)
- 八皇后问题(3)
- 八皇后问题
- 八皇后问题程序
- 浅谈八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 八皇后问题求解
- 八皇后问题
- 八皇后问题
- 八皇后问题
- 数据库的体系结构及其对比
- maven web 工程转 java web工程
- 四种加密算法之SHA1源代码-C++
- html5移动开发制作基于模拟现实物理效果的游戏
- jQuery对象 dom对象 转换
- 八皇后问题
- Android四大基本组件介绍与生命周期
- IAR 7.1 6.7 6.6 破解方法
- 淘宝api的简单调用
- 黑马程序员--面对对象4
- [android篇]通过UPnP协议发现NAS
- jQuery动态创建div方法
- html5移动开发物理游戏的心得
- jstl标签: c:Foreach详解