SSL1613最短路径问题
2016-12-09 19:29
337 查看
SSL1613最短路径问题
题目
平面上有n个点(N<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点直线的距离。现在的任务是找出从一点到另一点之间的最短路径。题意
给出n个点,其中的一些点之间有连线,两点间的距离需自己求,求一点到另一点之间的最短路径。题解
1.两点间的距离:横坐标差与纵坐标差的平方的和的平方根sqrt(sqr(abs(x[i]-x[j]))+sqr(abs(y[i]-y[j])))
2.Floyd,Dijkstra等求最短路径的算法均可
3.时间复杂度:Floyd=O(n*n*n)Dijkstra=O(n*n)
代码
1.Floydvar n,i,j,k,q,p,s,t,m:longint; x,y:array[1..100]of real; a:array[1..100,1..100]of real; begin readln(n); fillchar(a,sizeof(a),$7f); for i:=1 to n do readln(x[i],y[i]); readln(m); for i:=1 to m do begin readln(q,p); a[q,p]:=sqrt(sqr(abs(x[q]-x[p]))+sqr(abs(y[q]-y[p]))); a[p,q]:=a[q,p]; end; readln(s,t); for k:=1 to n do for i:=1 to n do for j:=1 to n do if a[i,k]+a[k,j]<a[i,j] then begin a[i,j]:=a[i,k]+a[k,j]; a[j,i]:=a[i,j]; end; writeln(a[s,t]:0:2); end.
2.Dijkstra
var n,i,j,q,p,s,t,m:longint; k:real; x,y:array[0..100]of real; b:array[0..100]of boolean; a:array[0..100,0..100]of real; begin readln(n); fillchar(a,sizeof(a),$7f); for i:=1 to n do readln(x[i],y[i]); readln(m); for i:=1 to m do begin readln(q,p); a[q,p]:=sqrt(sqr(abs(x[q]-x[p]))+sqr(abs(y[q]-y[p]))); a[p,q]:=a[q,p]; end; readln(s,p); for i:=1 to n do x[i]:=a[s,i]; fillchar(b,sizeof(b),false); b[s]:=true; repeat k:=maxlongint;t:=0; for j:=1 to n do if (x[j]<k)and(not b[j]) then begin k:=x[j]; t:=j; end; if t<>0 then begin b[t]:=true; for j:=1 to n do if (not b[j])and(x[t]+a[t,j]<x[j]) then x[j]:=x[t]+a[t,j]; end; until t=0; writeln(x[p]:0:2); end.
相关文章推荐
- SSL-ZYC 1613 最短路径问题
- ssl1613-最短路径问题【图论,最短路径(还不明显?)】
- 最短路径问题【SSL 1613】
- SSL 1613——最短路径问题(最短路)
- SSL_1613 最短路径问题
- 最短路径问题-SSL 1613
- ssl1613最短路径问题
- (ssl 1613)最短路径
- 【SSLGZ 1613】最短路径问题
- 两个城市之间寻找最短路径问题(广度优先搜索)
- 最短路径问题
- 魔兽世界 最短路径问题
- 单源最短路径问题
- 完全最短路径问题Floyd算法 pku 1125 Stockbroker Grapevine
- 最短路径问题 java实现 源代码
- 动态规划解最短路径问题
- 最短路径问题的延伸
- 点对的最短路径问题
- 最短路径问题——Dijkstra算法(C++实现)
- 单源无权最短路径举例——字梯问题