一維陣列實現八皇后問題

2021-10-23 09:12:22 字數 1312 閱讀 6582

解析思路:

第乙個皇后先放第一行第一列

第二個皇后放在第二行第一列、然後判斷是否 ok, 如果不 ok,繼續放在第二列、第三列、依次把所有列都放完,找到乙個合適

繼續第三個皇后,還是第一列、第二列……直到第 8 個皇后也能放在乙個不衝突的位置,算是找到了乙個正確解

當得到乙個正確解時,在棧回退到上乙個棧時,就會開始回溯,即將第乙個皇后,放到第一列的所有正確解, 全部得到

然後回頭繼續第乙個皇后放第二列,後面繼續迴圈執行 1,2,3,4 的步驟

說明:理論上應該建立乙個二維陣列來表示棋盤,但是實際上可以通過演算法,用乙個一維陣列即可解決問題.arr[8]= //對應 arr 下標 表示第幾行,即第幾個皇后,arr[i] =val , val 表示第 i+1 個皇后,放在第 i+1 行的第 val+1 列

**實現:

package com.sai.recursion;

/** * @author sai

* @description 八皇后問題

* @time 2020-07-13 16:39

*/public class queen8

int arr = new int[max];

//檢視乙個都多少種方法

static int count = 0;

public static int getcount()

//依次放入皇后

//每一次遞迴時,進入到push中都有 for

(int i = 0; i < max; i++),因此會有回溯

public void push(int n)

//依次放入皇后,並判斷是否衝突

for (int i = 0;i < max;i++)}}

//判斷是否衝突

public boolean isconflict(int n)

} return true;

}//遍歷陣列,輸出擺放好的位置

public void print()

count++;

system.out.println()

;}}

測試類:

package com.sai.recursion;

/** * @author sai

* @description 八皇后問題的測試類

* @time 2020-07-13 16:39

*/public class queen8_test

}

八皇后 N皇后問題 遞迴實現

八皇后問題,即在乙個棋盤上,每行都可以放置乙個皇后,但每個皇后都不能影響其他皇后的安全,即所有皇后的位置不能在同一直線上 解決問題方法及思想 遞迴 在使用遞迴之前首先要準備好兩個函式實現 1.判斷此時此刻位置是否安全 只需要判斷元素上方,左上方,右上方是否安全,且只要有乙個位置不安全,則結束判斷 2...

八皇后問題 c 實現

using system using system.collections.generic using system.text namespace eightqueen static int n 8 static char board new char n,n private static int ...

八皇后問題的實現

八皇后問題的實現 遞迴方法實現八皇后問題的 int notdanger int row int j,int chess 8 判斷左上方 for i row,k j i 0 k 0 i k 判斷右上方 for i row,k j i 0 k 8 i k 判斷右下方 for i row,k j i 8 ...