生若夏花,死如秋葉深度遍歷演算法原理及**
深度遍歷演算法例題應用
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...