城市问题(dij)
Description
設(shè)有n個(gè)城市,依次編號(hào)為0,1,2,……,n-1(n<=100),另外有一個(gè)文件保存n個(gè)城市之間的距離(每座城市之間的距離都小于等于1000)。當(dāng)兩城市之間的距離等于-1時(shí),表示這兩個(gè)城市沒(méi)有直接連接。求指定城市k到每一個(gè)城市i(0<=I,k<=n-1)的最短距離。
Input
第一行有兩個(gè)整數(shù)n和k,中間用空格隔開(kāi);以下是一個(gè)NxN的矩陣,表示城市間的距離,數(shù)據(jù)間用空格隔開(kāi)。
Output
輸出指定城市k到各城市間的距離(從第0座城市開(kāi)始,中間用空格分開(kāi))
Sample Input
3 1 0 3 1 3 0 2 1 2 0
Sample Output
3 0 2
分析
輸入時(shí),如果a[i,j]=-1 那么就a[i,j]=maxlongint
用dijkstra算法,算出每個(gè)點(diǎn)之間的最短距離
再一個(gè)循環(huán)輸出
- var n,i,m,s,t,j:longint; a:array[0..200,0..200]of longint; pre,d:array[0..200]of longint; mark:array[0..200]of boolean; procedure dij; var i,j,u,min:longint; beginfor i:=0 to n-1 dod[i]:=a[s,i];fillchar(mark,sizeof(mark),false);mark[s]:=true;for j:=0 to n-2 dobeginmin:=maxlongint;for i:=0 to n-1 doif (not mark[i])and(d[i]<min) thenbeginu:=i;min:=d[i];end;mark[u]:=true;for i:=0 to n-1 doif (not mark[i])and(d[u]+a[u,i]<d[i])and(a[u,i]<>maxlongint) thenbegind[i]:=d[u]+a[u,i];pre[i]:=u;end;end; end;beginreadln(n,s);for i:=0 to n-1 dofor j:=0 to n-1 dobeginread(a[i,j]);if a[i,j]=-1 then a[i,j]:=maxlongint;end;dij;for i:=0 to n-1 dowrite(d[i],' '); end.
轉(zhuǎn)載于:https://www.cnblogs.com/YYC-0304/p/9500142.html
總結(jié)
- 上一篇: 最短路径问题(dijkstra)
- 下一篇: 庆功会(多重背包)