C語言 最短路徑問題(Dijkstra演算法)

2021-10-16 12:56:35 字數 1766 閱讀 2194

優點——適用範圍廣,本**屬於公式型**,可隨意更換資料,適合零基礎同學。

主要思路:

1.用乙個二維陣列存放帶權有向圖的鄰接矩陣;

2.基於dijkstra演算法分別申請三個陣列,distance, path, used分別記錄從起點到其餘各點的最短距離,到目標結點路徑上的前乙個結點,到圖中某個結點是否已找到最短路徑;

3.逐漸確定從源點到圖中各結點的最短路徑,直至結束;

如下圖所示,求最短經。

// #include "stdlib.h "

#include

#define size

110

#define inf

1000000

; int map[

size][

size];

//鄰接矩陣儲存

int len[

size];

//d[i]表示源點到i這個點的距離

int visit[

size];

//節點是否被訪問

int n,m,j,pos,ans,temp;

int temp =

inf;

int dijkstra

(int from

, int to)

for(i =

1; i < n ;

++i)

} visit[pos]=1

;for

(j =

1; j <= n ;

++j)}}

return len[to];}

int main()

}/* int a,b,c; //輸入資料

for(i = 1 ; i <= m ; ++i) */

map[1]

[2]=

7;//測試資料

map[1]

[3]=

9;map[1]

[6]=

14;map[2]

[3]=

10;map[2]

[4]=

15;map[3]

[6]=

2;map[5]

[6]=

9;map[4]

[5]=

6;map[3]

[4]=

11;for(i =

1; i <= n ;

++i)

}printf

("%d"

,ans=

dijkstra(3

,6))

;return0;

}/* 邊的資料

1 2 7

1 3 9

1 6 14

2 3 10

2 4 15

3 6 2

5 6 9

4 5 6

3 4 11

*/例如:求1點到5點的最短距離

結果:

例如:求2點到5點的最短距離

結果:

最短路徑C語言

問題描述 現已知有n n 10 個城市m m 30 條路,保證每個城市之間有路,單向到達,每個城市之間的路程不一樣,求任意兩個城市之間的最短路程 樣例輸入 4 81 2 2 1 3 6 1 4 4 2 3 3 3 1 7 3 4 1 4 1 5 4 3 12 樣例輸出 0 2 5 4 9 0 3 4...

問題 C 最短路徑

問題 c 最短路徑 在洛谷上刷最短路的題然後被老師拉回去做演算法筆記上面的題。拿到這道題,先確定所有路徑唯一,然後是無向邊,那麼對於邊權處理,直接賦值為2的k次方就可以了,然後直接跑最短路。這種思路非常暴力,但仔細看題目的資料範圍,k 500,ull你估計都存不下,沒救。有的同學可能會想,反正最後都...

最短路 最短路徑問題

題目描述 平面上有n個點 n 100 每個點的座標均在 10000 10000之間。其中的一些點之間有連線。若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點直線的距離。現在的任務是找出從一點到另一點之間的最短路徑。input 共有n m 3行,其中 第一行為乙個整數n。第2行...