佛洛依德 c++ 最短路径算法
//20142880 唐炳辉 石家庄铁道大学
#include<iostream>
#include<string>
using namespace std;
#define Maxnum 32767
#define N 100 typedef struct
{
string Dianarr[N];
string info[N];
int arcs[N][N];
int DianNum,BianNum;
}FloydStruct; int LocateVex(FloydStruct G, string a)
{
int i;
bool flag = ;
for(i = ;i < G.DianNum;i++)
if(a == G.Dianarr[i])
{
flag = ;
return i;
}
if(flag == )
{
return -;
}
}
void CreateUDN(FloydStruct &G)
{
cout << "请输入顶点数和边数:" << endl;
cin >> G.DianNum >> G.BianNum;
cout << "请输入顶点信息:" << endl;
for(int i = ;i<G.DianNum;i++)
cin >> G.Dianarr[i];
for(int i = ;i<G.DianNum;i++)
for(int j = ;j<G.DianNum;j++)
G.arcs[i][j] = Maxnum;
string v1,v2;
int w,i,j;
cout << "请输入存在路径的两个顶点和路径长度:" << endl;
for(int k = ;k<G.BianNum;k++)
{
cin >> v1 >> v2 >> w;
i = LocateVex(G,v1);//获取点的数组下标
j = LocateVex(G,v2);
G.arcs[i][j] = w;//权值赋值给两点
}
} int Path[N][N];
int D[N][N];
void Floyd(FloydStruct G) //佛洛依德
{
for(int i = ;i < G.DianNum;i++)
for(int j = ; j < G.DianNum;j++)
{
D[i][j] = G.arcs[i][j];
if(D[i][j]<Maxnum)
Path[i][j] = i;
else
Path[i][j] = -;
}
for(int k = ;k < G.DianNum;k++)/**核心**/
for(int i = ; i < G.DianNum;i++)
for(int j = ; j < G.DianNum;j++)
if(D[i][k] + D[k][j] < D[i][j])
{
D[i][j] = D[i][k] + D[k][j];
Path[i][j] = Path[k][j];
}
} void printFl(FloydStruct G) //输出
{
/*string a,b;
int i,j,font = 1;
cout << "请输入当前位置和要去位置:" << endl;
cin >> a >> b;
//显示最短路径 i = LocateVex(G,a);
j = LocateVex(G,b);
if(D[i][j]==Maxnum)
cout << "最短距离为:" << "不可达!"<< endl;
else
cout << "最短距离为:" << D[i][j]<< endl;*/
for(int i=;i<G.DianNum;i++)
{
for(int j=i+;j<G.DianNum;j++)
{ if(D[i][j]!=Maxnum)
{int q =; int j1=j;
int a[]={};
while()
{ if(Path[i][j1]!=i)
{ a[q]=j1=Path[i][j1]; q=q++; }
else
{
break;}
} cout<<G.Dianarr[i]<<"------>";
for(int p=q-;p>=;p--)
{
cout<<G.Dianarr[a[p]]<<"------>";
}
cout<<G.Dianarr[j]<< D[i][j]<< endl;
}
} }
//temp终点 } void main()
{
FloydStruct G;
CreateUDN(G);//生成邻接矩阵
Floyd(G);
printFl(G);
}
佛洛依德 c++ 最短路径算法的更多相关文章
- hdu 1217 Arbitrage(佛洛依德)
Arbitrage Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total S ...
- 最短路径算法 1.Floyed-Warshall算法
这几周开始正式系统学习图论,新学期开始新的记录.由于二模和生物地理两门高考的临近,时间比较仓促,所以暂时跳过图论的(一)和(二),即图的储存和遍历.从最短路径算法学起,首先要学习的是Floyed-Wa ...
- Johnson 全源最短路径算法
解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...
- Floyd-Warshall 全源最短路径算法
Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...
- Dijkstra 单源最短路径算法
Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...
- Bellman-Ford 单源最短路径算法
Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...
- 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)
几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3). Floyd-Warshall算法(Floyd ...
- 带权图的最短路径算法(Dijkstra)实现
一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...
- 无向图的最短路径算法JAVA实现
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
随机推荐
- linux 技巧:使用 screen 管理你的远程会话
你是不是经常需要 SSH 或者 telent 远程登录到 Linux 服务器?你是不是经常为一些长时间运行的任务而头疼,比如系统备份.ftp 传输等等.通常情况下我们都是为每一个这样的任务开一个远程终 ...
- wp8.1 VS2013部署手机发生 DEP6100 6200错误
wp8.1 VS2013部署手机发生 DEP6100 6200错误 ,提示未发现手机. 可能是数据线有问题 建议更换 本人的电脑有很多次,提示DEP6100 6200错误,每一次都需要重做系统.. 然 ...
- 在.net中调用Delphi dll的Pchar转换
Pchar是非托管代码,要在.net中调用Delphi dll中的功能,请使用MarshalAs属性告知.net调用PInvoke去转换.net中标准的string类型.如果Delphi dll是De ...
- rpm与yum
设置本地源与网络源:https://my.oschina.net/u/1861462/blog/723958 rpm命令:http://man.linuxde.net/rpm https://my.o ...
- 实时控制软件设计第一周作业-汽车ABS软件系统案例分析
汽车ABS软件系统案例分析 ABS 通过控制作用于车轮制动分泵上的制动管路压力,使汽车在紧急刹车时车轮不会抱死,这样就能使汽车在紧急制动时仍能保持较好的方向稳定性. ABS系统一般是在普通制动系统基础 ...
- RabbitMQ学习之集群部署
我们先搭建一个普通集群模式,在这个模式基础上再配置镜像模式实现高可用,Rabbit集群前增加一个反向代理,生产者.消费者通过反向代理访问RabbitMQ集群. 架构图如下: 设计架构可以如下:在一个集 ...
- css3水波纹效果
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js判断手机 横屏模式
js判断手机 横屏模式 方法名称:orientation 实例: if(window.orientation!=0){ var obj=document.getElementById('orienta ...
- winserver2008 management note
1,磁盘online及介质保护 Windows server 2008 增加的磁盘无法初始化-提示:介质受写入保护.插了下相关说明,在VMware的帖子找到了解决办法: 开始-运行,cmd.打开命令提 ...
- Leetcode: Poor Pigs
There are 1000 buckets, one and only one of them contains poison, the rest are filled with water. Th ...