深度優先遍歷圖的方法是,從圖中某頂點v出發:
(1)訪問頂點v;
(2)依次從v的未被訪問的鄰接點出發,對圖進行深度優先遍歷;直至圖中和v有路徑相通的頂點都被訪問;
(3)若此時圖中尚有頂點未被訪問,則從乙個未被訪問的頂點出發,重新進行深度優先遍歷,直到圖中所有頂點均被訪問過為止。 當然,當人們剛剛掌握深度優先搜尋的時候常常用它來走迷宮.事實上我們還有別的方法,那就是廣度優先搜尋(bfs).
#include
#include
using
namespace std;
const
int n=10;
int n;
int path[n]
;bool st[n]
;void
dfs(
int u)
for(
int i=
1;i<=n;i++)}
}int
main()
#include
using
namespace std;
const
int n =20;
// bool陣列用來判斷搜尋的下乙個位置是否可行
// col列,dg對角線,udg反對角線
// g[n][n]用來存路徑
int n;
char g[n]
[n];
bool col[n]
, dg[n]
, udg[n]
;void
dfs(
int u)
//對n個位置按行搜尋
for(
int i =
0; i < n; i ++
)// 剪枝(對於不滿足要求的點,不再繼續往下搜尋) udg[n - u + i],+n是為了保證大於0if(
!col[i]
&&!dg[u + i]
&&!udg[n - u + i])}
intmain()
leetcode51 N皇后 dfs,全排列
n 皇后問題研究的是如何將 n 個皇后放置在 n n 的棋盤上,並且使皇后彼此之間不能相互攻擊。上圖為 8 皇后問題的一種解法。給定乙個整數 n,返回所有不同的 n 皇后問題的解決方案。每一種解法包含乙個明確的 n 皇后問題的棋子放置方案,該方案中 q 和 分別代表了皇后和空位。示例 輸入 4輸出 ...
N皇后問題 DFS
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...
N皇后問題 dfs)
在n n的方格棋盤放置了n個皇后,使得它們不相互攻擊 即任意2個皇后不允許處在同一排,同一列,也不允許處在與棋盤邊框成45角的斜線上。你的任務是,對於給定的n,求出有多少種合法的放置方法。input 共有若干行,每行乙個正整數n 10,表示棋盤和皇后的數量 如果n 0,表示結束。output 共有若...