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