public class eightKing {
//定义一个8*8的数组作为棋盘
public static int[][] arry = new int[8][8];
//方法个数
public static int result = 0;
//主方法,从第零行开始查找
public static void main(String[] args) {
findKing(0);
}
public static void findKing(int row) {//row是行数 //当行数>7时,即已经走完了最后一行(0-7行),结果加1,打印结果,退出方法。 if (row > 7) { result++; print(); return; } //i是列数。遍历检查第row行每一列,下面写了check方法 for (int i = 0; i < arry.length; i++) { if (check(row, i)) { //如果检查通过(即当前位置没有同列,同斜线位置的棋子),将数组中该位置的值置为1 arry[row][i] = 1; //继续查找下一行 findKing(row + 1); //如果下一行检查没有通过的位置,方法执行结束会返回到这里,这时将该位置改回0,防止脏读。 arry[row][i] = 0; } } } //检查方法 public static Boolean check(int row, int y) { // 检查同列 for (int i = 0; i < row; i++) { if (arry[i][y] == 1) { return false; } } // 检查左边。行列各减一即左对角线上的上一个位置 for (int i = row-1,j=y-1; i >=0&j>=0; i–,j–) { if(arry[i][j]==1) { return false; } } //检查右边.行减一,列数加一即右对角线上的上一个位置 for (int i = row-1,j=y+1; i >=0&j<8; i–,j++) { if(arry[i][j]==1) { return false; } } //左右对角线及同列没有棋子,返回true return true; } //打印结果 public static void print() { System.out.println("=====第" + result + "种方案===="); for (int i = 0; i < arry.length; i++) { for (int j = 0; j < arry[i].length; j++) { if (arry[i][j] != 0) { System.out.println("第" + i + "行,第" + j + "列"); } } } System.out.println("=============================="); } }