八皇后问题非桟的解决方法
来源:互联网 发布:全球数据库 编辑:程序博客网 时间:2024/05/18 01:06
主要难点是判断数组元素位置是否符合皇后放置规定。
判断某个数组元素是否符合要求时应该注意判断一下6个方面:
该元素的同行;
该元素的同列;
该元素的左下;
该元素的右下;
该元素的左上;
该元素的右上;
该方法如下:
bool guarded(int c[][8],int a,int b)//判断位置是否符合要求{int i;for(i=0;i<8;i++)//判断同列{ if(c[a][i]==1) return false;}for(i=0;i<8;i++)//判断同行{ if(c[i][b]==1) return false;}for(i=0;(a-i>=0)&&(b+i<8);i++)//判断左下方元素{if(c[a-i][b+i]==1) return false;}for(i=0;(a+i<8)&&(b+i<8);i++)//判断右下方元素{if(c[a+i][b+i]==1) return false;}for(i=0;(a+i<8)&&(b-i>=0);i++)//判断右上方元素{if(c[a+i][b-i]==1) return false;}for(i=0;(a-i>=0)&&(b-i>=0);i++)//判断左上方元素{if(c[a-i][b-i]==1) return false;}return true;}该算法如下:
#include<iostream.h>bool guarded(int c[][8],int a,int b)//判断位置是否符合要求{int i;for(i=0;i<8;i++)//判断同列{ if(c[a][i]==1) return false;}for(i=0;i<8;i++)//判断同行{ if(c[i][b]==1) return false;}for(i=0;(a-i>=0)&&(b+i<8);i++)//判断左下方元素{if(c[a-i][b+i]==1) return false;}for(i=0;(a+i<8)&&(b+i<8);i++)//判断右下方元素{if(c[a+i][b+i]==1) return false;}for(i=0;(a+i<8)&&(b-i>=0);i++)//判断右上方元素{if(c[a+i][b-i]==1) return false;}for(i=0;(a-i>=0)&&(b-i>=0);i++)//判断左上方元素{if(c[a-i][b-i]==1) return false;}return true;}void start(int a[][8]){int i,j;for(i=0;i<8;i++){for(j=0;j<8;j++){a[i][j]=0;}}}void printf(int a[][8])//打印输出数组{ int i,j;for(i=0;i<8;i++){for(j=0;j<8;j++){cout<<a[i][j]<<" ";}cout<<endl;}}//bool nidaye()//{return true;}//void panduan(int a[][8])//{// int i,j;//for(i=0;i<8;i++)//{//for(j=0;j<8;j++)//{///cout<<guarded(a,i,j)<<" ";//}//cout<<endl;//}//}int sum1(int a[][8])//判断皇后数量{intsum=0; for(int i=0;i<8;i++){ for(int j=0;j<8;j++) { if(a[i][j]==1) sum=sum+1; }} return sum;}void main(){int a[8][8];start(a);for(int k=0;k<8;k++){for(int l=0;l<8;l++){a[k][l]=1;//每次置为一的元素不同for(int i=0;i<8;i++)//循环判断每个元素位置是否符合要求{for(int j=0;j<8;j++){if(guarded(a,i,j)){a[i][j]=1;}}} if(sum1(a)==8)//判断皇后有8个时{printf(a);} start(a);//注意每次循环将数组初始化}}}
0 0
- 八皇后问题非桟的解决方法
- 八皇后问题的非递归解法
- 八皇后问题的非递归算法
- 八皇后问题的两种解决方法
- 八皇后问题 非递归
- 高效的八皇后问题非递归解法
- 八皇后问题的非递归算法实现
- 八皇后问题--递归与非递归的实现
- 八皇后的问题
- 八皇后的问题
- 八皇后的问题
- 八皇后问题(非递归版)
- 八皇后问题(递归+非递归)
- 八皇后问题--递归和非递归
- 八皇后问题 回溯 非递归 java
- 八皇后、N皇后问题的求解。
- 关于八皇后的非递归解决
- 八皇后问题的实现
- Ubuntu系统学习笔记-1.系统安装
- 面试整理(2)
- 【SSLGZ 1613】最短路径问题(Floyd)
- 分割回文串
- 使用 DS-MDK 开发 NXP iMX7
- 八皇后问题非桟的解决方法
- MyBatis+Spring分页插件配置
- 备份CSDN博客正文到本地存档
- 嵌入式系统开发商从开源操作系统中受益
- Java中数组冒泡排序
- animate.css
- 了解Node.js的异步式I/O与事件式编程
- RxJava 入门 慕课网
- linux下snmp4j获取net-snmp的基本信息