八皇后問題 遞迴回溯法 Java實現

2021-09-19 08:25:44 字數 743 閱讀 5523

一.題目

經典的八皇后問題是要將八個皇后放在棋盤上,任何兩個皇后不能相互攻擊(即沒有兩個皇后是在同一行,同一列或者同意對角線上).編寫程式列出所有的解決方案和解決方案的總數.

二.**及思想

package work22;

public class test

public static void search(int i)

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

} }

public static boolean check(int i, int j)

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

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

}return true;

} public static void print()}}

system.out.println();

}}

核心**是search方法,該方法有乙個引數i表示當前判斷到第幾行,if(i > 7)這個判斷表示已經找到了一種情況(即行數已經超過7),然後呼叫print方法列印該種情況,並通過return語句返回到上一次遞迴中的array[i][j] = 0,將這種情況下的最後乙個值清為0,並在此基礎上接著for迴圈尋找改行下乙個可能的值,若沒有,則接著向上回溯.

解決八皇后問題使用的是遞迴回溯演算法.

八皇后問題 遞迴 回溯法

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

八皇后問題 遞迴 回溯法

八皇后問題,是乙個古老而著名的問題。是回溯演算法的典型案例。該問題是國際西洋棋棋手馬克斯 貝瑟爾於1848年提出 在8x8格的西洋棋上擺放八個皇后,使其不能互相攻擊。即隨意兩個皇后都不能處於同一行 同一列或同一斜線上。問有多少種擺法。高斯覺得有76種方案。1854年在柏林的象棋雜誌上不同的作者發表了...

八皇后問題 遞迴回溯法

寫在前面 最開始接觸是資料結構老師在提到過,後來在學python時老師也有提到過,出於好奇就去思考了這個問題,當然,小白的我還是在b站懶貓老師的幫助下學會啦,真棒哈哈哈哈哈哈 這裡主要問題是在於判斷對角線上是否能放,表示上對角線d1,表示下對角線d2,根據老師所說加上自己的理解,同乙個下對角線上 n...