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演算法
- 【演算法】深度優先搜尋(DFS)演算法
- dfs與貪心演算法——洛谷5194演算法
- 求最短路徑——DFS+Floyd演算法演算法
- 深度優先搜尋演算法(DFS)講解演算法
- JAVA圖搜尋演算法之DFS-BFSJava演算法
- 深度優先搜尋演算法-dfs講解演算法
- LeetCode演算法練習——深度優先搜尋 DFSLeetCode演算法
- leetcode刷題記錄:演算法(六)BFS&DFSLeetCode演算法
- 深度優先搜尋(DFS)思路及演算法分析演算法
- DFS
- 深度DFS 和 廣度BFS搜尋演算法學習演算法
- DFS樹
- dfs序
- dfs技巧
- Tempter of the Bone(DFS)
- 深搜dfs
- BFS演算法原理演算法
- RAM演算法原理演算法
- RSA演算法原理演算法
- SFR演算法原理分析演算法
- Prime Ring Problem (dfs)
- DAG bfs + dfs 126,
- 樹的DFS序
- Java常用演算法原理剖析Java演算法
- OPTICS聚類演算法原理聚類演算法
- Hash join演算法原理(轉)演算法
- XGBoost演算法原理小結演算法
- LRU演算法原理解析演算法
- GBDT 演算法:原理篇演算法
- 基本演算法——深度優先搜尋(DFS)和廣度優先搜尋(BFS)演算法
- 圖的dfs_euler
- DFS序例題+感受
- DFS入門筆記筆記
- 聚類演算法——DBSCAN演算法原理及公式聚類演算法公式
- Svm演算法原理及實現演算法
- TCP協議、演算法和原理TCP協議演算法
- Paxos演算法原理與推導演算法