Dijkstra演算法 最短路徑問題

2021-08-19 04:05:00 字數 1412 閱讀 1949

時間限制

: 1000 ms       

記憶體限制

: 65536 kb

提交數: 807    

通過數: 373 

平面上有

n個點(

n≤100

),每個點的座標均在

-10000~10000

之間。其中的一些點之間有連線。

若有連線,則表示可從乙個點到達另乙個點,即兩點間有通路,通路的距離為兩點間的直線距離。現在的任務是找出從一點到另一點之間的最短路徑。

共n+m+3

行,其中

:第一行為整數n。

第2行到第n+1

行(共n

行),每行兩個整數x和

y,描述了乙個點的座標。

第n+2

行為乙個整數

m,表示圖中連線的個數。

此後的m

行,每行描述一條連線,由兩個整數i和

j組成,表示第

i個點和第

j個點之間有連線。

最後一行:兩個整數s和

t,分別表示源點和目標點。

一行,乙個實數(保留兩位小數),表示從s到

t的最短路徑長度。

5
0 0
2 0
2 2
0 2
3 1
5
1 2
1 3
1 4
2 5
3 5
1 5
3.41

no

#includeusing namespace std;

#define n 155

int main()

int m;

cin>>m;

for(i=1;i<=n;i++)

for(j=1;j<=n;j++)

f[i][j]=maxx;

for(i=1;i<=m;i++)//鄰接矩陣

int s,e;

cin>>s>>e;

double c[n];

int b[n];

for(i=1;i<=n;i++)

memset(b,0,sizeof(b));

b[s]=1;

c[s]=0;

int k;

for(i=1;i<=n-1;i++)

if(k==0) break;

b[k]=1;

for(j=1;j<=n;j++) //更新藍點

if(c[k]+f[k][j]c[j]=c[k]+f[k][j];

}printf("%.2lf",c[e]);

return 0;

}

Dijkstra最短路徑演算法

基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...

Dijkstra最短路徑演算法

引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...

最短路徑 Dijkstra演算法

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...