无向图的深度优先遍历非递归_图算法总结
@[TOC]
圖算法
1、圖的表示
1.1、鄰接矩陣(有向圖、無(wú)向圖、帶權(quán)圖、代碼實(shí)現(xiàn))
1、無(wú)向圖的鄰接矩陣
2、有向圖的鄰接矩陣
3、帶權(quán)值的圖
有了上述的理解,我們可以設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu),并實(shí)現(xiàn)了。C++實(shí)現(xiàn)如下:
#include1.2、 鄰接表
1、鄰接表的提出
2、無(wú)向圖的鄰接表
3、有向圖的鄰接表(分出邊表、入邊表)
4、帶權(quán)圖的處理
有了上面的鄰接表的理解,我們可以實(shí)現(xiàn)代碼(java):
package1.3、 十字鏈表與鄰接多重表
1、十字鏈表——解決有向圖鄰接表結(jié)構(gòu)缺點(diǎn)
2、鄰接多重表——解決無(wú)向圖鄰接表結(jié)構(gòu),邊的刪除麻煩問(wèn)題
1.4、邊集數(shù)組
2、圖的遍歷
2.1、DFS(深度優(yōu)先搜索、遞歸算法)
基于鄰接矩陣的DFS
template由于是鄰接矩陣存儲(chǔ)結(jié)構(gòu),算法時(shí)間復(fù)雜度O(n^2^)
基于鄰接表的DFS
template鄰接表使得算法復(fù)雜度為O(n+e),n為頂點(diǎn)個(gè)數(shù),e為邊數(shù)。
2.2、BFS(寬度優(yōu)先搜索、優(yōu)先隊(duì)列)
對(duì)邊搜索、不斷延展。 鄰接矩陣的BFS
void鄰接表的BFS
void2.3、小結(jié)
3、尋找最小生成樹(兩個(gè)貪心算法)
實(shí)際問(wèn)題:
3.1、Prim算法(分割法、貪心策略:尋找集合中的頂點(diǎn)所連接邊中最小權(quán)值邊)
貪心策略、算法分析:
template3.2、 Kruskal算法(邊集數(shù)組、每次從剩余邊選擇最小權(quán)值邊)
圖解分析:
基于分析我們可以寫出代碼:
template運(yùn)行結(jié)果:
4、最短路徑問(wèn)題
4.1、單源最短路徑問(wèn)題(給定一個(gè)點(diǎn),求到其余各個(gè)點(diǎn)的距離)
4.1.1、迪杰特斯拉(Dijkstra)算法(貪心算法)
很像prim算法,利用集合,尋找最短路徑。但是有區(qū)別。而且用途也不同。這是一個(gè)貪心算法。
基于理解上的算法實(shí)現(xiàn) :
template未優(yōu)化的算法復(fù)雜度很高
4.1.2、Floyd算法(動(dòng)態(tài)規(guī)劃)
4.1.3、Bellman-Ford 算法
總結(jié)
以上是生活随笔為你收集整理的无向图的深度优先遍历非递归_图算法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php远程下载头像,远程使用gravat
- 下一篇: 15数码 java,15数码问题