在做pat的時候,用dfs寫了一道題的解超時,看別人的解法時,發現別人用了dijkstra演算法,瞬間自己就混亂了,因為之前也看過dijkstra,bfs演算法,但是當時居然都傻傻分不清楚了,所以決定寫一篇總結一下。
一:廣度優先演算法(bfs)
先搜尋鄰居,搜完鄰居再搜鄰居的鄰居。
其中倆個思想:1.雙端佇列不為空則迴圈
2.將未訪問的鄰接點壓入雙端鍊錶後面,然後從前面取出並訪問(這樣就做到了廣度優先)
圖的解釋:
1 2
3 4 5 6
這個是二叉樹的例子,
這裡如果是廣度優先的話,訪問的順序依次是0123456.
**如下:
#include#include#include#include#include using namespace std;
int graph[7][7] = ;
void bfs();
dequea;
int visited[7] = ;
int main(void)
void bfs()
} visited[u] = 1; //標記為訪問
cout << u; //輸出
a.pop_front(); // 將堆前元素壓出 }
二:深度優先演算法(dfs)
我這裡介紹下遞迴思想來寫:
1.先找到出發點
2.依次對找其所有未訪問的鄰接點做dfs(仔細想想,這裡,未訪問完鄰居繼續做dfs,這樣就做到了深度優先,是不是?)
這裡貼乙個樹的深度優先搜尋樹的例子
這個樹很簡單:
1 2
3 4 5 6
是乙個二叉樹。
如果是深度優先演算法來搜,則搜尋順序應該為:0134256
這裡貼出**
#include#include#include#include using namespace std;
int graph[7][7] = ;
void dfs(int number);
int visited[7] = ;
int main(void)
void dfs(int number) }
//visited[number] = 0; //這個例子不用回朔答案也是對的,先不解釋
三.dijkstra演算法
1.找出未訪問過的到原點距離最小的頂點並標記為訪問
2.迴圈上個過程直到所有點都被訪問完
開始自己也不知道廣度優先演算法與dijkstra演算法的區別,廣度優先
是先將未訪問的鄰居壓入佇列,再將未訪問鄰居的未訪問過的鄰居壓入佇列再依次訪問,dijkstra
是在剩餘的未訪問過的頂點中找出最小的並訪問,迴圈做這個是直到所有點都被訪問完!
這裡先貼出例子:
圖為演算法導論384頁圖24-6
先大概講下過程:
圖中用鉛筆標記了01234五個點
第一步:訪問0點,並將0標記為訪問,這時候第i個點到0點的距離可以表示為dist=
第二步:這個時候,i=0已經訪問過了,此時最小的值為5,i=2,即訪問點2,這個時候點2可以到達點1,原點到點2的距離dist[2]=5加上從點2直接到點1的距離cost[2][1]=3等於8《原來的從原點直接到點1的距離dist[1]=10,則將dist[1]更新為8,同理更新其他點,這個時候dist=
第三步:這個時候i=0,2已經被訪問過了,dist最小的值為7,訪問值為7的點4.。。。。(後面繼續,直到所有點被訪問完)
實現**如下:(遞迴思想)
#include#include#include#include#include using namespace std;
int max=100000;
int cost[5][5] = ;
int dist[5] = ;
vectorvisited;
void dijkstra(int number);
int main(void)
return 0;
}void dijkstra(int number)
{ //標記為訪問過
visited[number] = true;
cout << number << endl;
//dist[i]陣列中儲存了從原點到i點的距離,dist[number]則表示從原點到number的距離,如果dist[number]+cost[number][i]
這是最後輸出的結果圖,前面輸出了訪問節點的順序,後面給出了最終的dist。
簡述mysql應用 MYSQL使用簡述
您可能感興趣的話題 mssql 一 連線mysql。1 例1 連線到本機上的mysql。首先在開啟dos視窗,然後進入目錄 mysqlbin,再鍵入命令mysql uroot p,回車後提示你輸密碼,如果剛安裝好mysql,超級使用者root是沒有密碼的,故直接回車即可進入到mysql中了,mysq...
PerformanceCounter簡述及用法
一 performancecounter簡述 1 簡單介紹 表示 windows nt 效能計數器元件 命名空間 system.diagnostics 程式集 system 在 system.dll 中 2 建構函式 只介紹本文要用到的 performancecounter string,strin...
簡述資料結構 超簡述演算法
程式由儲存資料的結構和解決問題的演算法組成,在計算機的世界裡,結構和演算法存在 相輔相成 的關係。程式根據演算法選擇最合適的儲存結構,演算法依賴儲存結構,選擇最優的策略處理資料,達到占用空間少 計算時間少的目的。打個比方,遇到乙個實際問題,需要解決兩個事情 1 如何將資料儲存在計算機中 2 用什麼方...