基本DFS與BFS演算法(C 實現

2022-07-31 01:24:16 字數 3089 閱讀 8479

樣圖:

dfs:深度優先搜尋,是乙個不斷探查和回溯的過程,每探查一步就將該步訪問位置為true,接著在該點所有鄰接節點中,找出尚未訪問過的乙個,將其作為下個探查的目標,接著對這個目標進行相同的操作,直到回到最初的節點,此時圖中所有節點都訪問過了。

bfs:廣度優先搜尋,是乙個逐層遍歷的過程,每探查一步就將該步訪問位置為true,接著在該點所有鄰接節點中,找出尚未訪問過的乙個,將其作為下個探查的目標,接著還是對該節點(而不是所選擇的目標)剩下的未訪問的點選擇乙個,作為下乙個探查的目標,直到沒有鄰接點為止。這些探測過的點存放於乙個佇列中,當該節點沒有鄰接節點時,取出隊首的點進行相同的操作,直到隊列為空,此時圖中所有節點都訪問過了。

實現**(鄰接矩陣法和鄰接表法):

鄰接矩陣法:(時間複雜度n^2),n代表頂點

1 #include2 #include3

#define maxvalue 100

4using

namespace

std;

5 template

6class graph

18 visited[0]=true;19

for(int i=0;i)23}

24}25 ~graph()

30int getfirst(int v)

36int getnext(int v,int w)

42bool removev(int v)48}

49}50bool inserte(int v1,int v2,e cost)

53bool removee(int v1,int v2)

56 e getw(int v1,int v2)

59void dfs(int v)67}

68void bfs(int v)

83 w=getnext(v,w);//

w重新設定成v的下乙個臨接節點 84}

85}86}

87void print()

95 cout<

97}98private:99

int *vlist;

100bool *visited;

101 e **edge;

102int

numv;

103104

};105

//1-9分別對應a-i

106int

main()

鄰接表法:(時間複雜度n+e),e代表邊

1 #include2 #include3

#define maxvalue 100

4using

namespace

std;

5 template

6structe15

};16 template

17struct

v 24

};25 template

26class

graph

36 visited[0]=true;37

}38 ~graph()

41int getfirst(int

v)47

int getnext(int v,int

w)52

if(p!=null&&p->link!=null)

55return -1;56

}57 e getw(int v1,int

v2)62

if(p!=null)

65return0;

66}67bool removev(int

v)78

if(q!=null)

83 vlist[v]->link=p->link;

84delete

p;85}86

return

true;87

}88bool inserte(int v1,int v2,int

w)98 p=p->link;99}

100if

(isin)

107 q=q->link;

108}

109return

true

;110 }else

117return

false

;118

}119

bool removee(int v1,int

v2)

129}

130if(p!=null)

136 }else

139 p=vlist[v2]->link;

140 q=null;

141while(p!=null)

148}

149if(p!=null)

155 }else

158}

159void dfs(int

v)167

}168

void bfs(int

v)183 w=getnext(v,w);

184}

185}

186}

187void print()

195 cout<

<

196}

197}

198private

:199 v**vlist;

200bool *visited;

201int

numv;

202};

203int

main()

BFS與DFS演算法

dfs總結 首先,我們先了解一下bfs,bfs又稱廣度優先搜尋,一般都是用於解決一些圖,樹的遍歷問題。其實廣度優先搜尋就類似與二叉樹的層序遍歷過程,需要借助c 中stl裡面的queue佇列容器來實現這個過程。它其實就是一種分層查詢的過程,每次向前走一步,都會去訪問一批可以訪問的節點,不會存在dfs裡...

演算法 DFS與BFS

一 dfs 深度優先搜尋 dfs 深度優先遍歷dfs與樹的先序遍歷比較類似。假設初始狀態是圖中所有頂點均未被訪問,則從某個頂點v出發,首先訪問該頂點然後依次訪問它的所有鄰接結點,每次訪問乙個鄰接結點時,以該鄰接結點為根結點繼續進行dfs,直到結點的所有鄰接結點以及其鄰接結點的鄰接結點都被訪問完,才訪...

演算法(九) DFS與BFS演算法

優秀的模板 很棒的總結 具體講解可以參考 啊哈!演算法 題2045 題目描述 在乙個55的地圖上,存在著障礙物和平地。在這個地圖中,小x想要找到回家的路。地圖上,你可以每次上下左右行走一步。他希望他回家所走的是最短路,請問,他所走的路徑中,最短路的方案數。輸入共5行,每行是乙個字串。表示空地,表示障...