C N皇后問題

2021-10-13 22:40:57 字數 1451 閱讀 2656

c - n皇后問題

在n*n的方格棋盤放置了n個皇后,使得它們不相互攻擊(即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。

你的任務是,對於給定的n,求出有多少種合法的放置方法。

input

共有若干行,每行乙個正整數n≤10,表示棋盤和皇后的數量;如果n=0,表示結束。

output

共有若干行,每行乙個正整數,表示對應輸入行的皇后的不同放置數量。

sample input

185

0

sample output

1

9210

#include

#include

intgetmethod

(const

int n)

;int

checkpoint

(int

*column,

const

int n)

;int

main()

else

if(n==end)

int method=

getmethod

(n);

printf

("%d"

,method)

;printf

("\n");

}return0;

}int

getmethod

(const

int n)

intcheckpoint

(int

*pcolumn,

const

int n)

//row表示當前要查詢的點的行數(1~n)

int flag=0;

//標誌變數,值為1表示找到的皇后的點不滿足條件

for(

int column1=

1; column1<=n; column1++

)//從row行的第1列開始尋找點,直到該行的最後一列}if

(flag==1)

pcolumn[row]

=column1;

//若滿足條件,記錄該行皇后的列數(縱座標)

row++

;//因為已找到,所以進入下一行

if(row-

1==n)

//若找齊所有皇后的點

else

} row--

;//若該行所有列數都找完,都找不到滿足條件的點,則回到上一行(上一層迴圈)

return pcolumn[0]

;//返回當前已找到的所有擺法

}

c n皇后問題

會下西洋棋的人都很清楚 皇后可以在橫 豎 斜線上不限步數地吃掉其他棋子。如何將8個皇后放在棋盤上 有8 8個方格 使它們誰也不能被吃掉!這就是著名的八皇后問題。乙個整數n 1 n 10 每行輸出對應一種方案,每種方案順序輸出每一行皇后所在的列號,相鄰兩數之間用空格隔開,按字典序輸出。如果不存在對應的...

DFS 回溯與剪枝 C N皇后問題

c n皇后問題 在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。out...

問題 I n皇后問題

在n n 格的棋盤上放置彼此不受攻擊的n 個皇后。按照西洋棋的規則,皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。n後問題等價於在n n格的棋盤上放置n個皇后,任何2 個皇后不放在同一行或同一列或同一斜線上。設計乙個解n 後問題的佇列式分支限界法,計算在n n個方格上放置彼此不受攻擊的n個皇...