八皇后(递归实现)
来源:互联网 发布:盘锦网络维护培训学校 编辑:程序博客网 时间:2024/05/16 11:59
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int cnt=0,Colum[10];//Colum[i]表示第i行的皇后放在第Colum[i]列void search(int k,int n){ if(k==n){//递归边界 cnt++; for(int i=0;i<n;i++){ printf("(%d,%d),",i,Colum[i]);//行,列的坐标 } printf("\n"); } else{ for(int i=0;i<n;i++){ int ok=1; Colum[k]=i; for(int j=0;j<k;j++){//判断第k行的皇后与第j行的皇后是否在同一列,是否在同一对角线 if(Colum[k]==Colum[j]||k-Colum[k]==j-Colum[j]||k+Colum[k]==j+Colum[j]){ ok=0;//同一主对角线上的元素的(行-列)是一个常数,同一副对角线上的元素的(行+列)是一个常数 break; } } if(ok) search(k+1,n); } }}int main(){ search(0,8); printf("八皇后的个数为%d\n",cnt); return 0;}
效率更高的
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int cnt=0,Colum[10];//Colum[i]表示第i行的皇后放在第Colum[i]列int visit[3][100];//0,1,2行分别表示已经放置的皇后占据了哪些列,主对角线,副主对角线void search(int k,int n){ if(k==n){//递归边界 cnt++; for(int i=0;i<n;i++){ printf("(%d,%d),",i,Colum[i]);//行,列的坐标 } printf("\n"); } else{ for(int i=0;i<n;i++){ if(!visit[0][i] && !visit[1][k+i] && !visit[2][k-i+n]){ //同一主对角线上的元素的(行-列)是一个常数, //同一副对角线上的元素的(行+列)是一个常数,所以当visit[1][k+i]为1时,表示副对角线上有皇后 //visit[2][cur-i+n],表示主对角线上有皇后 Colum[k]=i; visit[0][i]=visit[1][k+i]=visit[2][k-i+n]=1;//标记已经放了皇后 search(k+1,n); visit[0][i]=visit[1][k+i]=visit[2][k-i+n]=0;//又将皇后拿走 } } }}int main(){ memset(visit,0,sizeof(visit)); search(0,8); printf("八皇后的个数为%d\n",cnt); return 0;}
0 0
- 八皇后(递归实现)
- 八皇后递归实现
- 八皇后问题递归实现(C++)
- 八皇后问题(递归实现)
- 八皇后问题(递归实现)
- 八皇后 (递归)
- 八皇后 回溯递归实现
- 八皇后问题递归实现
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后问题(递归)
- 八皇后 c语言递归实现方法(带注释)
- 八皇后问题(递归+非递归)
- 八皇后 C语言递归实现
- 八皇后问题递归回溯算法实现
- 八皇后循环递归回溯实现
- 八皇后问题—递归实现
- openoffice服务启动
- LWIP 移植文件
- LeetCode 459. Repeated Substring Pattern
- JavaScript神一般的变量系统
- 网站日志分析项目案例(三)统计分析
- 八皇后(递归实现)
- 【Flask】从Excel中批量导入数据
- 总结一下之前的学习笔记
- C++的命名空间
- css三大特性
- CodeForces 733A - Grasshopper And the String
- 世安杯-LSB隐写-png
- 导航条左右扩大
- Hadoop生态系统搭建(1)——Ubuntu16.04环境搭建 Hadoop 2.7.0 全分布式环境