SSL1613最短路径问题
来源:互联网 发布:kiss乐队 知乎 编辑:程序博客网 时间:2024/05/18 00:59
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.Floyd
var 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.
1 0
- ssl1613最短路径问题
- SSL1613最短路径问题
- (ssl1613)最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 最短路径问题
- 第十六周项目1--验证算法--(4)快速排序
- 将字符串分段
- 微信支付和支付宝有什么区别?
- C#进制转换操作(二)
- URL编码方法的比较
- SSL1613最短路径问题
- java接口回调(记录所学所整理,请多多指)
- DP专题--数的划分
- mysql安装
- 第十六周 -项目1 -算法验证 (7)归并排序 (8)基数排序
- 智能化时代
- Android 绘制百分比圆环进度条
- 面试感悟----一名3年工作经验的程序员应该具备的技能
- [LeetCode]Excel Sheet Column Title