遞迴回溯 八皇后問題

2021-09-24 21:20:53 字數 889 閱讀 8140

八皇后問題:

西洋棋中皇后能橫向,縱向和斜向移動,在這三條線上的其他棋子都可以被吃掉。所謂八皇后問題就是:將八位皇后放在一張8x8的棋盤上,使得每位皇后都無法吃掉別的皇后,(即任意兩個皇后都不在同一條橫線,豎線和斜線上),問一共有多少種擺法?

解決思路:

1.將第一行第一列放入

2.在第二行適合的位置(不在上乙個皇后的同行同列及對角線上)放入

如此類推,直到放到第八個皇后即為一種解法,如果還沒到第八個皇后 就 回退到上一行 換一列放入  然後繼續

下面來看**:

public class eightqueen 

// 尋找皇后節點

public static void findqueen(int i)

// 深度回溯,遞迴演算法

for (int m = 0; m < 8; m++)

} }// 判斷節點是否合適

public static boolean check(int k, int j)

} // 檢查左對角線

for (int i = k - 1, m = j - 1; i >= 0 && m >= 0; i--, m--)

} // 檢查右對角線

for (int i = k - 1, m = j + 1; i >= 0 && m <= 7; i--, m++)

} return true;

} // 列印結果

public static void print() else

}system.out.println();

} system.out.println();

}}

八皇后問題(遞迴,回溯)

八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 n 1 或...

遞迴 回溯 八皇后問題

八皇后 問題,是乙個古老而著名的問題,是回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法.輸入 無 輸出 8行8列的矩陣,0代表此處無皇后,1表示此處有...

八皇后(遞迴 回溯)

設計一種演算法,列印 n 皇后在 n n 棋盤上的各種擺法,其中每個皇后都不同行 不同列,也不在對角線上。這裡的 對角線 指的是所有的對角線,不只是平分整個棋盤的那兩條對角線。注意 本題相對原題做了擴充套件 示例 輸入 4 輸出 q q q q.q.q q q 解釋 4 皇后問題存在如下兩個不同的解...