• 八皇后问题


    public class EightQueenDemo {

    public static int count = 0;
    public boolean check(int array[][], int num, int i, int j) {
    //每行每列都只有一个棋子
    for(int k = 0; k < num; k++) {
    if(array[i][k] == 1)
    return false;
    if(array[k][j] == 1)
    return false;
    }
    /*把i和j的值分别置为比当前棋子位置的值少一,即为左上角一格,
    i >= 0 && j >= 0;控制i和j在棋盘范围内,
    --i, --j;向左上角移动
    */
    for(int s = i - 1, t = j - 1; s >= 0 && t >= 0; s--, t--) {
    if(array[s][t] == 1)
    return false;
    }
    /*i的值为当前棋子的行值减一,j的值为当前棋子的列值加一,即为右上角一格,
    i != N && j != N; 控制i和j在棋盘范围内,
    --i, ++j;向右上角移动
    */
    for(int s = i - 1, t = j + 1; s >= 0 && t < num; s--, t++) {
    if(array[s][t] == 1)
    return false;
    }
    return true;
    }

    private void printQueen(int[][] array, int num) {
    System.out.println(num + "皇后的一种解法:");
    for(int i = 0; i < num; i++) {
    for(int j = 0; j < num; j++) {
    System.out.print(array[i][j] + " ");
    }
    System.out.println();
    }
    }

    public void find(int[][] array, int num, int row) {
    if(row > 7) {
    count++;
    printQueen(array, num);
    return;
    }
    for(int col = 0; col < num; col++) {
    if(check(array, num, row, col)) {
    array[row][col] = 1;
    find(array, num, row + 1);
    array[row][col] = 0;//一种解法找完后,将本位置重新置为0
    }
    }
    }

    public static void main(String[] args) {
    int num = 8;
    int[][] array = new int[num][num];
    EightQueenDemo eqd = new EightQueenDemo();
    eqd.find(array, num, 0);
    System.out.println("八皇后一共有:" + count + "种解法");
    }
    }
  • 相关阅读:
    凸优化之基追踪
    [转]广义正交匹配追踪(gOMP)
    SAMP论文学习
    sublime学习笔记
    IEEE Trans 2009 Stagewise Weak Gradient Pursuits论文学习
    [转]压缩感知重构算法之分段正交匹配追踪(StOMP)
    IEEE Trans 2008 Gradient Pursuits论文学习
    Git学习笔记
    树状数组【bzoj1103】: [POI2007]大都市meg
    模拟赛 10-25上午考试记
  • 原文地址:https://www.cnblogs.com/zq010539/p/11853047.html
Copyright © 2020-2023  润新知