題目詳見
首先找出解空間:給棋盤的行和列都編上1到n的號碼,皇后也給編上1到n的號碼。由於乙個皇后應在不同的行上,為不失一般性,可以假定第i個皇后將放在第i行上的某列。因此n皇后問題的解空間可以用乙個n元組(x1,x2,.....xn)來表示,其中xi是放置皇后i所在的列號。這意味著所有的解都是n元組(1,2,3,.......,n)的置換。解空間大小為n!。其次我們看約束條件:因為解空間已經給我們排除了不在同一行(因為每個皇后分別已經對應不同的行號)的約束條件。我們要判斷的是不在同一列和不在同一斜線的約束。因為xi表示皇后所在的列號,所以如果存在x(k)=x(i)那麼肯定存在第k個皇后和第i個皇后同列。所以不同列的判段條件是x(k)!=x(i),1
程式設計基本思路:x(i)表示乙個解的空間,i表示行數,裡面的值表示可以放置在的列數,抽象約束條件得到能放置乙個皇后的約束條件(1)x(i)!=x(k);(2)abs(x(i)-x(k))!=abs(i-k)。應用回溯法,當可以放置皇后時就繼續到下一行,不行的話就返回到第一行,重新檢驗要放的列數,如此反覆,直到將所有解解出。
做的時候沒注意全域性變數的定義 出錯
#include#includeint n,sum;
int x[15]; //儲存皇后放置的列數
int place(int k)
else
for(int i=1;i<=n;i++)//不是全域性變數 不能定義在開頭
// return sum;
} int main()
return 0;
}
HDOJ 2553 N皇后問題
n皇后問題 time limit 1000msmemory limit 32768kb64bit io format i64d i64u description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的...
n皇后問題 HDOJ 2553
problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如...
HDU 2553 N皇后問題
題目 problem description 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數...