Java实现经典八皇后的问题

来源:互联网 发布:php程序员工具箱 编辑:程序博客网 时间:2024/05/16 13:45
今天自己实现了八皇后的问题,其实代码并不长,但是关于虚拟机中怎样实现的想了好长时间特别是红色部分。现在还是有点不是很明白。代码如下,已经实现运行。
public class EightQueen {public static int sum = 0; //累计方法总数      public static final int MAXQUEEN = 8;//皇后个数,同时也是棋盘行列总数      public static int []columnForRow = new int[MAXQUEEN]; //定义数组,表示8列棋子摆放情况  public static void main(String[] args) {placeQueue(0);System.out.println();System.out.println("共有"+sum+"走法。");}//检查所放位子是否合法。public static boolean check(int row){boolean t=true;for(int i=0;i<row;i++){/* * 放在同一列,绝对值=0; * 放在对角线,绝对值=1; * 放在斜对角线,绝对值=-1 **/int diff=Math.abs(columnForRow[row]-columnForRow[i]);if ((diff==0)||(diff==row-i)){t=false;break;}}return t;}//放棋子的具体过程。public static void placeQueue(int row){<span style="color:#ff0000;">if(row==MAXQUEEN){sum++;printBoard();return;}</span>for(int i=0;i<MAXQUEEN;i++){columnForRow[row]=i;if(check(row)){placeQueue(row+1);}}}//输出结果public static void printBoard(){System.out.println("第"+sum+"个走法:");for(int i=0;i<MAXQUEEN;i++){for(int j=0;j<MAXQUEEN;j++){if(j!=columnForRow[i]){System.out.print("+");}else System.out.print("Q");}System.out.println();}}}

0 0
原创粉丝点击