深度優先搜尋演算法程式設計模板

2021-07-16 15:02:09 字數 1388 閱讀 9772

深度優先搜尋適合解決必須走到最深處(例如對於樹,須走到它的葉子節點)才能得到乙個解的問題。通常利用遞迴實現,所以每次遞迴開始的時候要判斷是否達到收斂條件,若達到了則得到乙個可行解,若沒達到,則對當前狀態進行擴充套件(擴充套件的時候通常會根據實際情況過濾掉一些非法的狀態,這個過程叫剪枝,適當的剪枝有時能極大地提高搜尋的速度),如果要求輸出具體解,則此時應該儲存該狀態,當擴充套件結束後,需要釋放這個儲存的狀態。下面是乙個深度優先搜尋的程式設計模板:

/**

* dfs 模板.

* @param[in] input 輸入資料指標

* @param[inout] cur or gap 標記當前位置或距離目標的距離

* @param[out] path 當前路徑,也是中間結果

* @param[out] result 存放最終結果

* @return 路徑長度,如果是求路徑本身,則不需要返回長度

*/void dfs(type *input, type *path, int cur or gap, type *result)

if (可以剪枝) return;

實現的程式如下:

#include "stdafx.h"

#include #include #include using namespace std;

class solution

private:

vectorcolumn; //column[i]表示第i行皇后所在的列

vectorprinciple_diagonals; //表示主該主對角線是否已經有皇后

vectorcounter_diagonals; //表示副對角線是否已經有皇后

void dfs(vector>& result,vector&c ,int row)

{ int n=c.size();

if(row==n) //收斂條件

深度優先搜尋演算法

include include define vertexnum 9 struct node typedef struct node graph struct node head vertexnum 定義圖形結構 int visited vertexnum 頂點陣列 深度優先搜尋 void dfs ...

深度優先搜尋演算法

今天我們來複習一下萬能的搜尋演算法之深度優先搜尋演算法。深度優先搜尋演算法顧名思義就是按照樹的延伸不停的往下搜尋,直到樹的盡頭之後再一步一步的回溯回來。好吧,我們直接問你乙個問題,給你乙個數n,讓你輸出從1到這個樹的全排列,你會怎麼寫,會不會想到去用若干個for迴圈?好吧,你肯定錯了,其實他考的就是...

深度優先搜尋演算法

1.深度優先搜尋演算法的概念 深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個 節點只能訪問一次。如下例 該圖為乙個無向圖,假設我們從a開始進行深度優先搜尋,第二點可以是b c d中任意乙個,...