演算法之DFS演算法框架

2021-10-13 19:09:34 字數 946 閱讀 6509

前面說到了bfs,就少不了dfs了~

dfs全稱是深度優先搜尋,聽這個名字就知道,這個演算法就是一直不斷往下的「深度」搜尋,思想就是:一直往深處走,直到找到解或者走不下去為止

欸欸欸,等等,怎麼這麼像之前說到的回溯演算法???沒錯,你感覺是沒錯的,實際上這個dfs就是回溯演算法!!!建議同學直接翻一翻我之前提到的回溯演算法那篇博文。

void dfs(depth)

// 列舉下個情況

dfs(depth + 1);

// 沒有下個情況了,回溯

return;

}

這裡就不多說了,直接上栗子:遍歷二維座標

const int32_t maxn = 100;

bool visted[maxn][maxn]; // 訪問標記

int32_t positionrange[maxn][maxn]; // 座標範圍

int32_t direction[2] = ; // 方向向量,(x,y)周圍的四個方向

// 邊界條件和約束條件的判斷

bool checkedge(int32_t x, int32_t y)

else

}void dfs(int32_t x,int32_t y)

for (int32_t i = 0; i < 4; i++)

}return; // 沒有下層搜尋節點,回溯

}

這裡扯一扯dfs與bfs的本質區別:

dfs實際上就是實現類似於乙個棧的操作,將節點按照深度優先的次序壓棧,後面再以相反的次序出棧進行新的檢測,實際上也就是遞迴實現之後的乙個體現出來的特點。

bfs實際上就是實現乙個佇列的操作,將本節點處理完畢之後,再將周圍相鄰的節點入列,後面再依次遍歷處理。

演算法筆記之DFS與 BFS

基本思想 深度優先搜尋 dfs,depth first search 它從某個狀態開始,不斷的轉移狀態直到無法轉移狀態,然後回退到前一步的狀態,繼續轉移到其它狀態,如此不繼重複,直至找到最終的解。寬度優先搜尋 bfs,breadth first search 總是先搜尋距離初始狀態近的狀態,也就是說...

演算法 回溯演算法套路(dfs)

解決乙個回溯問題,本質是乙個決策樹的遍歷 三要素 1.路徑 已經做出的選擇 2.選擇列表 當前可以做的選擇 3.結束條件 到達決策樹底層,不用再做選擇 演算法框架 result def backtrack path,choicelist if 滿足結束條件 result.push back path...

DFS演算法初探

我的理解就是找一條路一直走到黑,不行就一步步回退。常用遞迴來實現 下面用幾道題目進行理解 include include const int maxn 100 int mat maxn maxn vis maxn maxn char s maxn int n void dfs int x,int y...