樣圖:
dfs:深度優先搜尋,是乙個不斷探查和回溯的過程,每探查一步就將該步訪問位置為true,接著在該點所有鄰接節點中,找出尚未訪問過的乙個,將其作為下個探查的目標,接著對這個目標進行相同的操作,直到回到最初的節點,此時圖中所有節點都訪問過了。
bfs:廣度優先搜尋,是乙個逐層遍歷的過程,每探查一步就將該步訪問位置為true,接著在該點所有鄰接節點中,找出尚未訪問過的乙個,將其作為下個探查的目標,接著還是對該節點(而不是所選擇的目標)剩下的未訪問的點選擇乙個,作為下乙個探查的目標,直到沒有鄰接點為止。這些探測過的點存放於乙個佇列中,當該節點沒有鄰接節點時,取出隊首的點進行相同的操作,直到隊列為空,此時圖中所有節點都訪問過了。
實現**(鄰接矩陣法和鄰接表法):
鄰接矩陣法:(時間複雜度n^2),n代表頂點
1 #include2 #include3鄰接表法:(時間複雜度n+e),e代表邊#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()
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行,每行是乙個字串。表示空地,表示障...