DFS演算法原理
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;
}
相關文章
- 聊聊演算法——BFS和DFS演算法
- PYTHON實現DFS演算法Python演算法
- HDU 5468 Puzzled Elena(DFS序+容斥原理)
- 【演算法】深度優先搜尋(DFS)演算法
- 求最短路徑——DFS+Floyd演算法演算法
- 演算法學習之路|PlayOnWords(尤拉道路+dfs)演算法
- JAVA圖搜尋演算法之DFS-BFSJava演算法
- 深度優先搜尋演算法-dfs講解演算法
- 《圖論》——深度優先搜尋演算法(DFS)圖論演算法
- 深度優先搜尋演算法(DFS)講解演算法
- 深度優先搜尋(DFS)思路及演算法分析演算法
- DFS樹
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- leetcode刷題記錄:演算法(六)BFS&DFSLeetCode演算法
- Windows Server DFSWindowsServer
- 演算法學習之路|二分圖的最大匹配—匈牙利演算法(Dfs實現)演算法
- BFS演算法原理演算法
- RSA演算法原理演算法
- RAM演算法原理演算法
- Chord演算法(原理)演算法
- Shaping Regions(dfs)API
- 支援向量機原理(四)SMO演算法原理演算法
- simhash演算法的原理演算法
- RSA演算法原理(二)演算法
- RSA演算法原理(一)演算法
- Hash join演算法原理演算法
- oracle -- Hash演算法原理Oracle演算法
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 一道經典DFS題(深度優先)-演算法程式設計實踐演算法程式設計
- OPTICS聚類演算法原理聚類演算法
- LRU演算法原理解析演算法
- Hash join演算法原理(轉)演算法
- BIRCH聚類演算法原理聚類演算法
- Java常用演算法原理剖析Java演算法
- EM演算法原理總結演算法
- Apriori演算法原理總結演算法
- oracle hash join演算法原理Oracle演算法
- 聚類演算法——DBSCAN演算法原理及公式聚類演算法公式