問題引入:
解決思路:先放置第乙個皇后在第一行遍歷,確定第乙個皇后的列,然後利用遞迴放置下乙個皇后到下一行,並且放置途中需要判斷是否與之前放置的有衝突,直到8個皇后放置完畢,這就是一種解法,然後回溯,回到第8行繼續遍歷看是否有其它解法,如果沒有就繼續回溯到第七行遍歷,有的話就用遞迴找到下一行皇后放置的位置,沒有就繼續回溯
**實現:
/**
* 八皇后問題
* 將八個皇后放置到8*8的國際棋盤上(每一行只能放乙個),且皇后之間不能衝突(不能在同一行,同一列,同一條斜線上),有多少種擺法?
* @author codewen
* */
public
class
eightqueens
}return
false;}
//擺放第n(0-7)個皇后的方法
public
static
void
putqueen
(int n)
for(
int i=
0; i<
8; i++)}
}//顯示一種擺法的方法
public
static
void
show()
system.out.
println()
;}public
static
void
main
(string[
] args)
}
結果: 八皇后問題(遞迴,回溯)
八皇后問題是乙個以西洋棋為背景的問題 如何能夠在 8 8 的西洋棋棋盤上放置八個皇后,使得任何乙個皇后都無法直接吃掉其他的皇后?為了達到此目的,任兩個皇后都不能處於同一條橫行 縱行或斜線上。八皇后問題可以推廣為更一般的n皇后擺放問題 這時棋盤的大小變為n n,而皇后個數也變成n。當且僅當 n 1 或...
遞迴 回溯 八皇后問題
八皇后 問題,是乙個古老而著名的問題,是回溯演算法 的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法.輸入 無 輸出 8行8列的矩陣,0代表此處無皇后,1表示此處有...
遞迴回溯 八皇后問題
八皇后問題 西洋棋中皇后能橫向,縱向和斜向移動,在這三條線上的其他棋子都可以被吃掉。所謂八皇后問題就是 將八位皇后放在一張8x8的棋盤上,使得每位皇后都無法吃掉別的皇后,即任意兩個皇后都不在同一條橫線,豎線和斜線上 問一共有多少種擺法?解決思路 1.將第一行第一列放入 2.在第二行適合的位置 不在上...