DFS演算法原理

十二分熱愛發表於2018-08-02

DFS:使用棧儲存未被檢測的結點,結點按照深度優先的次序被訪問並依次被壓入棧中,並以相反的次序出棧進行新的檢測。 

 

 DFS模板

該DFS 框架以2D 座標範圍為例,來體現DFS 演算法的實現思想。
*/
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
const int maxn=100;
bool vst[maxn][maxn]; // 訪問標記
int map[maxn][maxn]; // 座標範圍
int dir[4][2]={0,1,0,-1,1,0,-1,0}; // 方向向量,(x,y)周圍的四個方向

bool CheckEdge(int x,int y) // 邊界條件和約束條件的判斷
{
if(!vst[x][y] && ...) // 滿足條件
return 1;
else // 與約束條件衝突
return 0;
}

void dfs(int x,int y)
{
vst[x][y]=1; // 標記該節點被訪問過
if(map[x][y]==G) // 出現目標態G
{
...... // 做相應處理
return;
}
for(int i=0;i<4;i++)
{
if(CheckEdge(x+dir[i][0],y+dir[i][1])) // 按照規則生成下一個節點
dfs(x+dir[i][0],y+dir[i][1]);
}
return; // 沒有下層搜尋節點,回溯
}
int main()
{
......
return 0;
}

 

相關文章