八皇后問題是乙個以西洋棋為背景的問題:如何能夠在
8×8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行、縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題:這時棋盤的大小變為n×n,而皇后個數也變成n。當且僅當 n = 1 或 n ≥ 4 時問題有解。
因此只需要判斷放下的當前位置的棋子的位置是否被之前放下的棋子位置有衝突即可。可以使用普通的二維陣列的判讀,但是這樣寫起來很麻煩,有冗餘。
此題 可以借助兩個二維數**來幫助理解,分別建立兩個x,y-x 的二維陣列和x,x+y的二維陣列來進行理解。cur-c[cur]==j-c[j] || cur+c[cur]==j+c[j] 用來判斷皇后(cur,c[cur])和(j,c[j])是否在同一條對角線上。使用c[cur]==c[j]判斷是否在同一列上。
**為:
#include
#include
#include
using
namespace
std;int
n,tot;
int c[50
];void
dfs(int
cur)}if
(ok)
dfs(cur+1
); }
}int
main()
}}int
main()
}
遞迴 回溯 八皇后問題
八皇后 問題,是乙個古老而著名的問題,是回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法.輸入 無 輸出 8行8列的矩陣,0代表此處無皇后,1表示此處有...
遞迴回溯 八皇后問題
八皇后問題 西洋棋中皇后能橫向,縱向和斜向移動,在這三條線上的其他棋子都可以被吃掉。所謂八皇后問題就是 將八位皇后放在一張8x8的棋盤上,使得每位皇后都無法吃掉別的皇后,即任意兩個皇后都不在同一條橫線,豎線和斜線上 問一共有多少種擺法?解決思路 1.將第一行第一列放入 2.在第二行適合的位置 不在上...
八皇后(遞迴 回溯)
設計一種演算法,列印 n 皇后在 n n 棋盤上的各種擺法,其中每個皇后都不同行 不同列,也不在對角線上。這裡的 對角線 指的是所有的對角線,不只是平分整個棋盤的那兩條對角線。注意 本題相對原題做了擴充套件 示例 輸入 4 輸出 q q q q.q.q q q 解釋 4 皇后問題存在如下兩個不同的解...