解析思路:第乙個皇后先放第一行第一列
第二個皇后放在第二行第一列、然後判斷是否 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 ...