关于八皇后问题的研究--回溯算法
2011-10-30 16:51
127 查看
今天从早上开始就在弄回溯法,都说回溯的经典问题是八皇后问题,于是就好好看了一下八皇后的问题。找出所有的情况可能有点难,但是找出一条路来感觉应该挺简单的。
我一直都不怎么会用递归,这个程序依然没有递归。
对于八皇后问题的描述在ppt里面。
附件:http://down.51cto.com/data/2359178
我一直都不怎么会用递归,这个程序依然没有递归。
/*这个算法主要解决八皇后问题*/ public class Huisu02 { //判断当前点是否处于以前点的对角线上 public static boolean isdianogal(int x,int y,int[] points){//把当前点的位置传过去 这里y有两个作用:表示当前点的坐标,表示points中点的个数 //判断正对角线 \ int xx=0,yy=0; xx=x>y?x-y: 0; yy=x>y? 0 :y-x; for (int i = yy; i < y; i++) {//这里必须从yy开始 因为需要判断x<y的情况 if(points[i]==xx){ return true; } xx++;yy++; } //判断反对角线 / xx=x+y<=7?x+y:7; yy=x+y<=7?0:x+y-7; for (int i = yy; i < y; i++) {//这里必须从yy开始 因为需要判断x<y的情况 if(points[i]==xx){ return true; } xx--;yy++; } return false; } public static void huisu(){ } public static void main(String[] args) { int[] samerow = new int[8];// 判断是否同列 int[] points=new int[8];//存储点的x轴的坐标 int index=0; boolean backed=false; points[index++]=0; samerow[0]=1; while (index<8) { int i=0; if(!backed){ for (i = 0; i < points.length; i++) { if(samerow[i]==0){//这一列是可选的 if(!isdianogal(i, index, points)){//不在对角线内 points[index++]=i; samerow[i]=1; break; } } } }else { for (i = points[index]+1; i < points.length; i++) { if(samerow[i]==0){//这一列是可选的 if(!isdianogal(i, index, points)){//不在对角线内 points[index++]=i; backed=false; samerow[i]=1; break; } } } } if(i>=8){//这一行已经没有可以选择的了 退回到上一行去 index--; samerow[points[index]]=0; backed=true; } } //把得到的结果反映到棋盘上面去 int[][] cheesbord = new int[8][8];// 代表棋盘放置了皇后就为1,没放就是0 int j=0; for (int i = 0; i < points.length; i++) { cheesbord[i][points[j]]=1; j++; } for (int i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { if(cheesbord[i][j]==1){ System.err.print(cheesbord[i][j]+" "); } System.err.print("# "); } System.err.println(); } } }
对于八皇后问题的描述在ppt里面。
附件:http://down.51cto.com/data/2359178
相关文章推荐
- 关于分布式事务、两阶段提交、一阶段提交、Best Efforts 1PC模式和事务补偿机制的研究
- 关于Python的super用法研究[转]
- 关于H.264,jrtp,directShow视频采集等的整合开发研究
- 关于 Hook Win32 API 的一点研究
- 关于BCGGrid自动分组的研究
- 关于Python的super用法研究
- 关于spi滤包技术的研究
- 关于Exchange 2010邮件追踪日志研究
- 关于android中webservice使用ksoap2传递复杂对象的研究
- 关于 UAV 的一些研究信息
- 关于计算机视觉研究
- 深度剖析关于Js中对象的研究
- 关于数据库DB负载均衡的初步研究(二)
- 关于Python的super用法研究(zt)
- 关于对LIR系统中不规则表格的整理算法研究
- 关于回溯算法
- [Freelists Internal] 关于Freelists和Freelist Groups的研究
- 关于计算机研究和写作的链接收集
- 关于研究和调研的3个故事:因为热爱
- 关于React中状态保存的研究