八皇后問題,是乙個古老而著名的問題,是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯·貝瑟爾於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.用迭代是人,用遞迴是神。分治演算法 是一種思想 分而治之,...