新手C#求助,八皇后算法问题 http://wenku.baidu.com/view/1f81f4ccda38376baf1faee4.htmlhttp://www.programfan.com/club/showpost.asp?id=101521&t=o问问题前先自己搜搜 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 参考..http://hi.baidu.com/liuqihu/blog/item/c24ad3f80132ef0ed9f9fdea.htmlhttp://www.ajaxcn.net/archives/233 第十行,for(Queen[y]+1;x<size;x++)这句有问题啊! 以前用FOX做过一次好像用了28行代码,不过搞了几个月 楼主你那个 while循环啥时候结束啊!! public class Queen { private final int size; //棋盘的大小,也表示皇后的数目 private int[] location; //皇后在棋盘的每行上的列的位置 private int[] colsOccupied; //皇后在棋盘上占据的列 private int[] cross1Occupied; //皇后在棋盘上占据的正对角线 private int[] cross2Occupied; //皇后在棋盘上占据的反对角线 private static int count; //解决方案的个数 private static final int STATUS_OCCUPIED=1; //占领状态 private static final int STATUS_OCCUPY_CANCELED=0; //未占领状态 public Queen(int size){ //初始化 this.size=size; location=new int[size]; colsOccupied=new int[size]; cross1Occupied=new int[2*size]; cross2Occupied=new int[2*size]; } public void printLocation(){ int [][] queen =new int[size][size]; System.out.println("NO."+count); for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ if(j==location){ queen[j] = 1; }else{ queen[j] = 0; } System.out.print(queen[j]+" "); } System.out.println(); } } /** 判断位置(i,j)是否被占领 */ private boolean isOccupied(int i,int j){ return (colsOccupied[j]==1) || (cross1Occupied[i-j+size-1]==1) || (cross2Occupied[i+j]==1); } /** 如果参数flag为1,表示占领位置(i,j); * 如果参数flag为0,表示取消占领位置(i,j) */ private void setStatus(int i,int j,int flag){ colsOccupied[j]=flag; //宣布占领或取消占领第j列 cross1Occupied[i-j+size-1]=flag; //宣布占领或取消占领正对角线 cross2Occupied[i+j]=flag; //宣布占领或取消占领反对角线 } /** 从第i行开始摆放皇后 */ public void place(int i){ for(int j=0;j<size;j++) //在第i行,分别尝试把皇后放在每一列上 if(!isOccupied(i,j)){ //判断该位置是否被占据 location=j; //摆放皇后,在第i行把皇后放在第j列 setStatus(i,j,STATUS_OCCUPIED); //宣布占领(i,j)位置 if( i<size-1) place(i+1); //如果所有皇后没有摆完,递归摆放下一行的皇后 else{ count++; //统计解决方案的个数 printLocation(); //完成任务,打印所有皇后的位置 } //回溯,撤销占领位置(i,j) setStatus(i,j,STATUS_OCCUPY_CANCELED); } } public void start(){ place(0); //从第0行开始放置皇后 } public static void main(String args[]){ new Queen(8).start(); System.out.println("八皇后问题共有"+count+"种摆放方法!"); }}以上引用于:http://www.madio.net/home-space-do-blog-uid-205923-id-2384.html C#打开exe程序,同一个文件夹里面的exe程序 C# 显示txt文件的内容 C# 时间段问题 winform 和 cookies c#VS2008打包发布程序并带有程序所用的数据库怎么整 一直困扰我的问题,帮忙解决一下 Thread的一个简单问题,有答案马上结帖 厦门DotNet俱乐部诚邀您参加技术论坛 100分的问题=如何用.NET的窗体控件来开发一个五子棋小游戏? ~~~~~~写Word表格前插入一行文字,马上给分!~~~~~~~~~~~~~~~~~~· cookie 有只能浏览,不能编辑的Office OCX控件么? Winform上用
http://hi.baidu.com/liuqihu/blog/item/c24ad3f80132ef0ed9f9fdea.html
http://www.ajaxcn.net/archives/233
这句有问题啊!
好像用了28行代码,不过搞了几个月
public class Queen { private final int size; //棋盘的大小,也表示皇后的数目 private int[] location; //皇后在棋盘的每行上的列的位置 private int[] colsOccupied; //皇后在棋盘上占据的列 private int[] cross1Occupied; //皇后在棋盘上占据的正对角线 private int[] cross2Occupied; //皇后在棋盘上占据的反对角线 private static int count; //解决方案的个数 private static final int STATUS_OCCUPIED=1; //占领状态 private static final int STATUS_OCCUPY_CANCELED=0; //未占领状态 public Queen(int size){ //初始化 this.size=size; location=new int[size]; colsOccupied=new int[size]; cross1Occupied=new int[2*size]; cross2Occupied=new int[2*size]; } public void printLocation(){ int [][] queen =new int[size][size]; System.out.println("NO."+count); for(int i=0;i<size;i++){ for(int j=0;j<size;j++){ if(j==location){ queen[j] = 1; }else{ queen[j] = 0; } System.out.print(queen[j]+" "); } System.out.println(); } } /** 判断位置(i,j)是否被占领 */ private boolean isOccupied(int i,int j){ return (colsOccupied[j]==1) || (cross1Occupied[i-j+size-1]==1) || (cross2Occupied[i+j]==1); } /** 如果参数flag为1,表示占领位置(i,j); * 如果参数flag为0,表示取消占领位置(i,j) */ private void setStatus(int i,int j,int flag){ colsOccupied[j]=flag; //宣布占领或取消占领第j列 cross1Occupied[i-j+size-1]=flag; //宣布占领或取消占领正对角线 cross2Occupied[i+j]=flag; //宣布占领或取消占领反对角线 } /** 从第i行开始摆放皇后 */ public void place(int i){ for(int j=0;j<size;j++) //在第i行,分别尝试把皇后放在每一列上 if(!isOccupied(i,j)){ //判断该位置是否被占据 location=j; //摆放皇后,在第i行把皇后放在第j列 setStatus(i,j,STATUS_OCCUPIED); //宣布占领(i,j)位置 if( i<size-1) place(i+1); //如果所有皇后没有摆完,递归摆放下一行的皇后 else{ count++; //统计解决方案的个数 printLocation(); //完成任务,打印所有皇后的位置 } //回溯,撤销占领位置(i,j) setStatus(i,j,STATUS_OCCUPY_CANCELED); } } public void start(){ place(0); //从第0行开始放置皇后 } public static void main(String args[]){ new Queen(8).start(); System.out.println("八皇后问题共有"+count+"种摆放方法!"); }}以上引用于:
http://www.madio.net/home-space-do-blog-uid-205923-id-2384.html