深度遍歷演算法詳細解釋及例題應用

2021-10-06 03:43:10 字數 2364 閱讀 5390

生若夏花,死如秋葉

深度遍歷演算法原理及**

深度遍歷演算法例題應用

1:全排列問題

2:abc+def=ghi問題

3:二維陣列尋找點到點的最短路徑

4:求島嶼的面積

5:求島嶼的個數

6:地板的埔法有多少種

7:二叉樹的深度遍歷

8:圖的深度遍歷

9:圖的最短路徑求解

10:找子集等於某給定的數

1:深度遍歷演算法原理及**

深度優先搜尋屬於圖演算法的一種,英文縮寫為dfs即depth first search.其過程簡要來說是對每乙個可能的分支路徑深入到不能再深入為止,而且每個節點只能訪問一次。

總結

這就是整個深度遍歷的全過程。

1:例題講解

#include

using

namespace std;

//交換兩個數

void

swap

(int

&a,int

&b)void

dfs(

int list,

int k,

int m)

for(

int i = k; i <= m; i++)}

intmain

(void);

int m =2;

dfs(a,0,

2);system

("pause");

}

思路和總結

也就是深度遍歷的思想,首先我們去第乙個,然後訪問下乙個,然後再接下來乙個。**

題目描述

從1~9中選擇出3組陣列,組成乙個百位數,每個數只能使用一次,譬如

718+245=963

#include

using

namespace std;

//交換兩個數

void

swap

(int

&a,int

&b)void

dfs(

int list,

int k,

int m)

for(

int i = k; i <= m; i++

)return;}

intmain

(void);

int m =2;

dfs(a,0,

8);system

("pause");

}

總結思路

也就是全排序的過程,然後再呼叫全排序數字的位置,進行判斷,就可以找出這樣的abc+def = ghi

0代表可以走。代表不可以走,選擇從(1,1)~(3,3)的最短路徑

#include

using

namespace std;

//abc + def = ghi問題

bool visited[5]

[5]=

;int step =1;

int minstep =

999;

int map[5]

[5]=

,,,,

};void

dfs(

int x,

int y,

int step)

else

return;}

}int

main

(void

)

總結

本題的解決方式也就是深度遍歷演算法,也就是一直查詢到底。也就是深度遍歷演算法的應用。

題目描述

給乙個二維陣列,0代表湖泊,1代表陸地,每個1代表1m^2 求給定的二維陣列中某個位置所在島嶼的面積。例題

0 0 0 0

0 1 1 0

0 1 0 0

0 0 0 0 求位置(1,1)所在島嶼的面積 如圖所示為3 m^2;

KMP詳細解釋及KMP演算法模板

kmp是什麼,kmp解決什麼型別的問題 kmp全稱為knuth morris pratt演算法,是一種高效的字串匹配演算法,尋找乙個字串中是否包含另乙個字串,例如 char s ababababcab char p ababc s為模板串 主串 p為子串,在s中找到p的位置 暴力匹配演算法 o n ...

深度優先遍歷回溯演算法的應用

void search int cur 這個模板就是目前我遇見的最簡潔的模板,用乙個二維陣列vis 3 其中vis 0 i 表示列,vis 1 i 和vis 2 i 表示對角線。因為 x,y 的y x值標識了主對角線,x y值標識了副對角線。由於y x可能為負,所以訪問時要加上n。下面主要介紹一下主...

BEPRT演算法的C 實現及詳細解釋

最近上演算法課的時候,聽到了乙個新的演算法beprt演算法,用來尋找陣列中的第k大的元素。本來以為是乙個不重要的演算法,結果去網上搜了一下,發現這個演算法是資料結構十大演算法之一,很重要很重要。所以特地學習了一下,並且自己把這個演算法實現了一下。include using namespace std...