博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图论最短路径例题
阅读量:5338 次
发布时间:2019-06-15

本文共 919 字,大约阅读时间需要 3 分钟。

一本通网站上不去,截图为证

还是要整博客的。。。

目前学了FloydO(n3)和dijkstra算法O(n2

Floyd是把每个点都遍历一遍,而后者只针对单个起点所以前者慢,但前者可以处理负边权(边的长度)。

下面是一道例题(数据较小用了Floyd):

中山路上有n(n<=100)家店,每家店的坐标均在-10000~10000之间。其中的m家店之间有通路。若有通路,则表示可以从一家店走到另一家店,通路的距离为两点间的直线距离。现在要找出从一家店到另一家店之间的最短距离。

代码:

#include
using namespace std;int a[105][3];double f[105][105];int n,i,j,k,x,y,m,s,e;int main(){ scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&a[i][1],&a[i][2]); scanf("%d",&m); memset(f,0x7f,sizeof(f)); //附一个超大的值,方便下面考虑最短路径 for(i=1;i<=m;i++){ scanf("%d%d",&x,&y); f[x][y]=(sqrt(pow(double(a[x][1]-a[y][1]),2)+pow(double(a[x][2]-a[y][2]),2))); //计算边权,也可以写成函数 f[y][x]=f[x][y]; } scanf("%d%d",&s,&e); for(k=1;k<=n;k++){ for(i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if((i!=j)&&(j!=k)&&(i!=k)&&(f[i][k]+f[k][j]

整个就是模板题,主要用来熟练思路

转载于:https://www.cnblogs.com/648-233/p/10744072.html

你可能感兴趣的文章
[工具] Sublime Text 使用指南
查看>>
Hangfire在ASP.NET CORE中的简单实现方法
查看>>
Algorithm——何为算法?
查看>>
Web服务器的原理
查看>>
小强升职计读书笔记
查看>>
常用的107条Javascript
查看>>
#10015 灯泡(无向图连通性+二分)
查看>>
忘记root密码,怎么办
查看>>
linux设备驱动归纳总结(三):1.字符型设备之设备申请【转】
查看>>
《黑客与画家》 读书笔记
查看>>
bzoj4407: 于神之怒加强版
查看>>
mysql统计一张表中条目个数的方法
查看>>
ArcGIS多面体(multipatch)解析——引
查看>>
css3渐变画斜线 demo
查看>>
JS性能DOM优化
查看>>
设计模式 单例模式 使用模板及智能指针
查看>>
c#的const可以用于引用类型吗
查看>>
手动实现二值化
查看>>
What Linux bind mounts are really doing
查看>>
linux top命令详解
查看>>