//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++ 最短路径算法的更多相关文章

  1. hdu 1217 Arbitrage(佛洛依德)

    Arbitrage Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total S ...

  2. 最短路径算法 1.Floyed-Warshall算法

    这几周开始正式系统学习图论,新学期开始新的记录.由于二模和生物地理两门高考的临近,时间比较仓促,所以暂时跳过图论的(一)和(二),即图的储存和遍历.从最短路径算法学起,首先要学习的是Floyed-Wa ...

  3. Johnson 全源最短路径算法

    解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...

  4. Floyd-Warshall 全源最短路径算法

    Floyd-Warshall 算法采用动态规划方案来解决在一个有向图 G = (V, E) 上每对顶点间的最短路径问题,即全源最短路径问题(All-Pairs Shortest Paths Probl ...

  5. Dijkstra 单源最短路径算法

    Dijkstra 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法,由计算机科学家 Edsger Dijkstra 于 1956 年 ...

  6. Bellman-Ford 单源最短路径算法

    Bellman-Ford 算法是一种用于计算带权有向图中单源最短路径(SSSP:Single-Source Shortest Path)的算法.该算法由 Richard Bellman 和 Leste ...

  7. 几大最短路径算法比较(Floyd & Dijkstra & Bellman-Ford & SPFA)

    几个最短路径算法的比较:Floyd 求多源.无负权边(此处错误?应该可以有负权边)的最短路.用矩阵记录图.时效性较差,时间复杂度O(V^3).       Floyd-Warshall算法(Floyd ...

  8. 带权图的最短路径算法(Dijkstra)实现

    一,介绍 本文实现带权图的最短路径算法.给定图中一个顶点,求解该顶点到图中所有其他顶点的最短路径 以及 最短路径的长度.在决定写这篇文章之前,在网上找了很多关于Dijkstra算法实现,但大部分是不带 ...

  9. 无向图的最短路径算法JAVA实现

    一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...

随机推荐

  1. 关于如何查看MySQL版本:

    方法一: 进入mysql cmd, status; 将显示当前mysql的version的各种信息. 方法二: 还是在mysql的cmd下,输入: select version(); 查看MySQL端 ...

  2. MySQL的几个概念:主键,外键,索引,唯一索引

    概念: 主键(primary key) 能够唯一标识表中某一行的属性或属性组.一个表只能有一个主键,但可以有多个候选索引.主键常常与外键构成参照完整性约束,防止出现数据不一致.主键可以保证记录的唯一和 ...

  3. C# ASP.NET MVC 图片盗链 加水印 的问题

    ImageClass using System; using System.Collections; using System.IO; using System.Drawing; using Syst ...

  4. css3的新特性transform,transition,animation

    一.transform css3引入了一些可以对网页元素进行变换的属性,比如旋转,缩放,移动,或者沿着水平或者垂直方向扭曲(斜切变换)等等.这些的基础都是transform属性 transform属性 ...

  5. 使用命令行 Subversion 访问项目源文件(SVN)

    from:http://www.open.collab.net/scdocs/ddUsingSVN_command-line.html.zh-cn 命令行 Subversion 入门 如果您参与的项目 ...

  6. 用Netty开发中间件:高并发性能优化

    用Netty开发中间件:高并发性能优化 最近在写一个后台中间件的原型,主要是做消息的分发和透传.因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本.Net ...

  7. union和union all有什么不同?

    union和union all有什么不同? 相同点:用来获取两个或者两个以上结果集的并集 不同点: union会自动去重,排序 union all没有去重,排序

  8. Sublime Text3快捷键以及常用插件

    工若善其事,必先利其器.做为一个web前端开发人员,必须有一个得心应手的编码工具,本人推荐Sublime Text3和WebStorm,但WebStorm太过智能和耗性能了对初学者来说弊大于利,所以我 ...

  9. linux系统无法启动解决方案

    windows和linux双系统一般先安装Windows,分两个主分区,把Linux安装在另外的主分区上.Linux编译内核,添加NTFS分区支持,然后Mount NTFS 分区即可访问Windows ...

  10. Nodejs express 文件上传

    文件上传 以下我们创建一个用于上传文件的表单,使用 POST 方法,表单 enctype 属性设置为 multipart/form-data. index.htm 文件代码修改如下: <html ...