求解n皇后
来源:互联网 发布:clock 算法 编辑:程序博客网 时间:2024/06/16 14:32
要求:在国际象棋上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法
思路:很直观的想法就是在棋盘上一个一个皇后的摆,如果冲突,则摆放在另一个位置,直至此次可以把n各皇后摆好而不产生冲突,则说明此种方法为一个解。然后将最后一个放置的皇后换个位置摆放,直至不产生冲突为止。很显然,此种思路即为算法中的回溯算法。
基于此思路代码如下:
#include<iostream>using namespace std;int const N =17;static int count=0;int x[N];int n;int conflict(int k) //参数k为要放置的第k个皇后{ int i; for(i=1;i<k;i++) if(abs(k-i)==abs(x[k]-x[i]) || x[k] == x[i]) return 1; return 0; } int queen(int k)//参数k为要放置第k个皇后{if(k>n&&n>0)//k为已放置的皇后数,如果在一次递归中已放置的皇后数大于//要放置的皇后数则说明此次递归过程为一个解count++;else{for(int t=1;t<=n;t++){x[k]=t;//标明第k个皇后放在第t行if(!conflict(k))queen(k+1);}}return count;}void main(){cout<<"请输入皇后的个数"<<endl;cin>>n;cout<<n<<"皇后的解个数为"<<queen(1)<<endl;}
程序运行结果如下:
1 0
- 求解n皇后问题
- 求解n皇后
- 求解N皇后问题
- 递归求解N皇后
- n皇后问题求解
- 八皇后、N皇后问题的求解。
- N皇后问题求解算法
- N 皇后求解回溯算法
- 回溯法求解n皇后
- n皇后问题求解 java
- 使用C#求解N皇后问题。
- C语言编程 N皇后问题求解
- 递归求解N皇后问题(c语言)
- N皇后问题的求解(C++代码)
- 回溯法求解n皇后问题
- QS2算法求解N-皇后问题
- N皇后问题回溯法求解
- n皇后问题-位运算求解
- 冒泡法排序C++实现
- Android 学习资料收集
- ContentProvider和app间传递数据
- 搞懂php apache mysql tomcat
- java复习总结3
- 求解n皇后
- 开启Mysql远程访问权限
- uva10397 Connect the Campus
- MongoDB的c++封装api
- springAOP术语简介
- 集训队专题(9)1004 See you~
- [BZOJ 1119][POI 2009]SLO
- 单向链表创建
- 嘿嘿,今天突然想起了,我还忘记了有个CSDN的博客没有来