用迪傑斯特拉演算法求一點到其餘所有結點的最短路徑。
先輸入乙個小於100的正整數n,然後輸入圖的鄰接矩陣(10000表示無窮大,即兩點之間沒有邊),最後輸入兩個0到n-1的整數表示兩個點。
先用迪傑斯特拉演算法求給定的第乙個點到其餘所有結點的最短路徑。
然後再輸出給定的兩個點之間的最短路徑(按順序輸出最短路徑上的每乙個點,每個資料佔一行)。
#include#define max 10000;
int arcs[100][100]; //儲存鄰接矩陣
int d[100]; //記錄源點到各節點的最短路徑
int fina[100]; //記錄節點是否已經判斷過,1代表已經運算過(在集合s中)
int n; //鄰接矩陣的邊數
int v0, v1; // 表示起始點和終點
int p[100]; //記錄路徑
void dijkstra()
d[v0] = 0;
fina[v0] = 1;
//主迴圈
for(int i = 1;i < n;i++)
}} fina[v] = 1; //表示已經處理過,加入集合s
for(k = 0;k < n;k++)
} }}
void print(int sec,int n) //sec為出發節點,n表示圖中節點總數
; int t = 0, k;
j = v1;
while(p[j] != -1)
printf("%d\n",v0);
for(k = 0;k < t;k++)
printf("%d\n",v1);
} int main()
} scanf("%d%d",&v0,&v1);
for(int i = 0;i < 100;i++) //路徑初始化為-1
dijkstra();
print(v0,n);
return 0;
}
Floyd 演算法 任意兩點間的最短路問題
求解所有兩點間的最短路的問題叫做任意兩點間的最短路問題。讓我們試著用dp來求解任意兩點間的最短路問題。只使用0 k的情況下,記i到j的最短路長度為d k 1 i j k 1時,認為只使用i和j,所以d 0 i j cost i j 接下來讓我們把只使用頂點0 k的問題歸納到只使用0 k 1的問題上。...
使用DFS求任意兩點間所有路徑
演算法具體原理就不講了,無非是當要返回到前乙個結點時將該結點重新設定為未訪問。void dfs int start,int end path.pop back 刪除最後乙個節點 vis start false 終點重新設定為未訪問 return vis start true 將當前結點設定為已訪問 ...
求兩點間的距離
煙台大學計算機學院 檔名稱 asdasd.cpp 作 者 劉磊 完成日期 2016年5月20日 版 本 號 vc 6.0 問題描述 分別利用成員函式,友元函式和一般函式求兩點的的距離,並設計main 函式完成測試 程式輸入 無 程式輸出 兩點間的距離 include include using na...