<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      算法筆記-N皇后求解

      n皇后問題是一個以國際象棋為背景的問題:在n×n的國際象棋棋盤上放置n個皇后,使得任何一個皇后都無法直接吃掉其他的皇后,即任意兩個皇后都不能處于同一條橫行、縱行或斜線上。請問有多少種擺法,并將每種擺法打印出來。

      遞歸算法1(最暴力的解法)

      可以從左到右嘗試棋子的擺放,例如先放置在第一行(1,1)放置,然后在第二行開始找與第一行放置不沖突的棋子,找到了(2,3),接著開始在第三行找,找到了(3,2)……一直到最后一行。如果出現下一行的每一列都有沖突,則返回到上一行,修改上一行的放置……重復上面的操作。

      1. 關于存儲放置的棋子的坐標,一般會想到二維數組來存放,如arr[i][j]=1,代表i行,j列有棋子,實際上用一個一維數組就可以解決該問題。例如a[4]=1表示第4列有棋子,而且無需再判斷兩個皇后是否在同一行。
      2. 關于如何判斷兩個棋子在不在對角線,若兩個棋子坐標(X 1,Y1),(X 2,Y2),則 |X 1-X2| != |Y 1-Y2|。當然在在之前應該首先判斷在不在同一列(a[j]==y)

        /* 回溯算法:n 皇后 */
        void backtrack(int row, int n, char state[MAX_SIZE][MAX_SIZE], char ***res, int *resSize, bool cols[MAX_SIZE],
        bool diags1[2 * MAX_SIZE - 1], bool diags2[2 * MAX_SIZE - 1]) {
        // 當放置完所有行時,記錄解
        if (row == n) {
        res[*resSize] = (char **)malloc(sizeof(char *) * n);
        for (int i = 0; i < n; ++i) {
        res[*resSize][i] = (char *)malloc(sizeof(char) * (n + 1));
        strcpy(res[*resSize][i], state[i]);
        }
        (*resSize)++;
        return;
        }
        // 遍歷所有列
        for (int col = 0; col < n; col++) {
        // 計算該格子對應的主對角線和次對角線
        int diag1 = row - col + n - 1;
        int diag2 = row + col;
        // 剪枝:不允許該格子所在列、主對角線、次對角線上存在皇后
        if (!cols[col] && !diags1[diag1] && !diags2[diag2]) {
        // 嘗試:將皇后放置在該格子
        state[row][col] = 'Q';
        cols[col] = diags1[diag1] = diags2[diag2] = true;
        // 放置下一行
        backtrack(row + 1, n, state, res, resSize, cols, diags1, diags2);
        // 回退:將該格子恢復為空位
        state[row][col] = '#';
        cols[col] = diags1[diag1] = diags2[diag2] = false;
        }
        }
        }

        /* 求解 n 皇后 */
        char ***nQueens(int n, int *returnSize) {
        char state[MAX_SIZE][MAX_SIZE];
        // 初始化 n*n 大小的棋盤,其中 'Q' 代表皇后,'#' 代表空位
        for (int i = 0; i < n; ++i) {
        for (int j = 0; j < n; ++j) {
        state[i][j] = '#';
        }
        state[i][n] = '\0';
        }
        bool cols[MAX_SIZE] = {false}; // 記錄列是否有皇后
        bool diags1[2 * MAX_SIZE - 1] = {false}; // 記錄主對角線上是否有皇后
        bool diags2[2 * MAX_SIZE - 1] = {false}; // 記錄次對角線上是否有皇后

        char ***res = (char ***)malloc(sizeof(char **) * MAX_SIZE);
        *returnSize = 0;
        backtrack(0, n, state, res, returnSize, cols, diags1, diags2);
        return res;
        }

          

      posted @ 2025-01-23 15:44  碼農喝狗尿  閱讀(52)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产精品自拍午夜福利| 无码成人午夜在线观看| 久久人妻精品国产| 国产精品成人中文字幕| 内射囯产旡码丰满少妇| 国产大尺度一区二区视频| 成 人免费va视频| 99riav国产精品视频| 一本久道中文无码字幕av| 97免费在线观看视频| 中文字幕日韩有码一区| 国产精品视频全国免费观看| 性一交一乱一伦一| 国产精品久久久久影院老司| 国产精品高清国产三级囯产AV| 永久无码天堂网小说区| 精品久久人人做爽综合| 东方av四虎在线观看| 日本精品aⅴ一区二区三区| 少妇爽到爆视频网站免费| 国产99青青成人A在线| 午夜福利影院不卡影院| 三级三级三级A级全黄| 女人被狂躁到高潮视频免费软件| 国产精品一区二区不卡91| 亚洲伊人精品久视频国产| 久久精品午夜视频| 亚洲中文字幕一区二区| 日韩无矿砖一线二线卡乱| 色爱综合另类图片av| 国内精品自线在拍| 亚洲欧美电影在线一区二区| 亚洲午夜福利AV一区二区无码| 丰台区| 亚洲最大天堂在线看视频| 国产福利高颜值在线观看| 蜜桃无码一区二区三区| 国产在线乱子伦一区二区| 亚洲精品日产AⅤ| 色一情一乱一伦麻豆| 亚洲性日韩精品一区二区|