java資料結構之遞迴(八皇后)問題

2021-08-27 21:35:57 字數 1063 閱讀 5049

八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於2023年提出:在8×8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處於同一行、同一列或同一斜線上,問有多少種擺法。 高斯認為有76種方案。2023年在柏林的象棋雜誌上不同的作者發表了40種不同的解,後來有人用圖論的方法解出92種結果。

解題思路:由上往下依次向下遍歷,那麼我們只需要驗證當前格仔的上方,左斜上方和右斜上方的位置是否有皇后(因為如果由上往下遍歷的時候,在當前行的下方是一定沒有皇后的,所以我們只需要驗證三個方向),如過三個方向都沒有皇后,那麼就可以確定當前位置可以放皇后

**實現:

package digui;

/** * 遞迴演算法之八皇后問題

* @author administrator

* */

public class bahuanghou

system.out.println();

} count++; }

/*** 檢驗方法(驗證該位置是否可以放皇后)

*/public static boolean check(int row,int col)

} //左斜上 (行減小 列減小)

for (int i = row-1,j = col-1; i >= 0&&j>=0 ; i--,j--)

}//右斜上 (行減小 列增加)

for (int i = row-1,j=col+1;i >= 0&& j<8 ; i--,j++)

}return true; }

/*** 八皇后演算法

*/public static void play(int row) else

//取消當前落子 清空棋盤

map[row][i] = 0;

}} }

public static void main(string args)

}

輸出結果:

資料結構和演算法遞迴之八皇后問題

package recursion public class queen8 寫乙個放置第n個皇后的方法 注意 check 每一次遞迴時進入到check中都有for int i 0 i private void check int n 依次放入皇后,並判斷是否衝突 for int i 0 i 如果衝突...

資料結構與演算法 遞迴 八皇后

八皇后問題介紹 八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即 任意兩個皇后都不能處於同一行 同一列或同一斜線上,問有多少種擺法。由於西洋棋是乙個8 8的棋盤,而且棋盤中總共需要...

JAVA資料結構之遞迴

package p03.遞迴 遞迴 1.函式呼叫函式自身,基於棧 2.但是不能無限呼叫,必須要有乙個終點 結束點 3.遞迴不能解決深度過大 n 的問題 4.到底用不用遞迴?但凡是迭代的問題都可以用遞迴,但是不代表遞迴的問題可以用迭代解決。5.用迭代是人,用遞迴是神。分治演算法 是一種思想 分而治之,...