一.最短路徑問題
1.單源最短路徑:
(1)迪傑斯特拉演算法(dijkstra),有權圖的單源最短路徑的模版
//path陣列初始化為-1,dist陣列初始化為正無窮
void dijkstra(vertex s)
} }
}
(2)無權圖的單源最短路徑的模版
void unweighted(vertex s)
} }
2.多源最短路徑
弗洛伊德演算法(floyd)
模版:bool floyd(graph graph,weighttype d[maxvertexnum],vertex path[maxvertexnum])
for(k=0;knv;k++)
for(i=0;inv;i++)
for(j=0;knv;j++)
if(d[i][k]+d[k][j]
d[i][j]=d[i][k]+d[k][j];
if(i==j&&d[i][j]<0)
return false;
path[i][j]=k; }
return true; }
例題:哈利·波特的考試
演算法框架:圖的建立+floyd,每個頂點到其他頂點的最大值,再找出這些值中的最小值
#include
#define maxsive 100
#define infinity 65535
intg[maxsive][maxsive];
int nv,ne;
int main()
//多源路經的最短距離(floyd)
for(k=1;k<=nv;k++)
for(i=1;i<=nv;i++)
for(j=1;j<=nv;j++)
if(g[i][k]+g[k][j]int max=infinity;
int in=0;
for(i=1;i<=nv;i++)
if(max
}printf("%d %d\n",in,max);
return0;
} 測試用例:
6 11
3 4 70
1 2 1
5 4 50
2 6 50
5 6 60
1 3 70
4 6 60
3 6 80
5 1 100
2 4 60
5 2 80
4 70
program ended with exit code: 0
資料結構學習筆記3
目錄 線性表的定義 線性表的抽象資料型別 順序儲存結構的插入與刪除 線性表的鏈式儲存結構 單鏈表的讀取 單鏈表的插入與刪除 單鏈表的整表建立 單鏈表的整表刪除 單鏈表的結構與順序儲存結構的優缺點 靜態鍊錶 迴圈鍊錶 雙向鍊錶 上述就是我學習的某本教材中關於線性表學習的目錄,這時候我們來找關係 1 什...
資料結構學習筆記
資料結構概述 定義我們如何把現實中大量而複雜的問題以特定的資料型別和特定的儲存結構 儲存到主儲存器 記憶體 中,以及在此基礎上為實現某個功能 比如查詢摸個 元素,刪除某個元素,對所有元素進行排序 而執行的相應操作,這個相應 的操作也叫演算法 資料結構 個體 個體的關係 演算法 對儲存資料的操作 演算...
資料結構學習筆記
資料結構學習筆記 程式 資料結構 演算法 資料結構 資料 結構 結構的本質是關係 資料之間的關係從不通風層面上分為邏輯關係和物理關係 演算法的設計要依據資料的邏輯關係 演算法的實現要依據資料的物理關係 物理關係是邏輯關係的基礎和載體 演算法實現時需要先依據問題抽象出資料模型,即初步確定待處理資料的邏...