八(n)皇后問題的方法總結

2021-09-02 11:42:25 字數 1053 閱讀 7600

第一種方法是我做洛谷p1219的時候學習的方法 將選的數的八個方向全部做標記,然後如果有標記的話就不訪問,深度優化搜尋以後再刪除標記:

#include

using

namespace std;

int n,a[50]

,b[50

],c[50]

,d[50];

int cnt=0;

intprint()

cout<<

"\n";}

cnt++;}

void

dfs(

int i)

else}}

}int

main()

後來發現大佬寫的更加簡潔,只需要開乙個二維陣列就可以: 原理一樣:

#include

using

namespace std;

int tot;

int bk[3]

[1000];

int n;

int num[

1000];

void

dfs(

int cur)

tot++

;return;}

else

for(

int i=

0;i}main()

//這個我加過優化了

還有一種就是lrj的寫法 這個是我剛開始接觸dfs的時候看到的 感覺對我很不友好 = = :

#include

using

namespace std;

int n=

8,c[8]

;int tot=0;

void

search

(int cur)

if(ok)

search

(cur+1)

;}}}

intmain()

基本就是這幾種方法 這是我學習dfs的開始 希望我可以快點理解dfs的內涵把2333

n皇后問題與八皇后

這裡的n皇后問題指在乙個nxn的棋盤上放置n個棋子,使得每行每列和每條對角線上都只有乙個棋子,求其擺放的方法數。當且僅當n 1 或 n 4 時問題有解。class queens vector vector res int result 0 bool test int cur for int i 0 ...

八皇后(n皇后)

n皇后問題是經典的遞迴型問題。輸入說明 n代表皇后的數量 輸出說明 每行n個數字,一行代表乙個解。例如2413代表第1行皇后放在第2列,第2行皇后放在第4列,第3行皇后放在第1列,第4行皇后放在第3列。數字都是從1開始的。樣例輸入 4樣例輸出 2413 3142 include include us...

八皇后問題 2n皇后問題

問題描述 在8 8格的西洋棋上擺放八個皇后,使其不能互相攻擊,即任意兩個皇后都不能處在同一行 同一列或同一斜線上。解決思路 解決八皇后問題不難,主要是應用到了遞迴回溯的方法,本質上也是一種列舉法。從棋盤的第一行開始嘗試擺放第乙個皇后,擺放成功之後,遞迴一層,再遵循規則在棋盤第二行來擺放第二個皇后。如...