//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常用日期函数(转载)

    /*date_add(date,interval expr type)和date_sub(date,interval expr type)执行日期运算. date 是一个 datetime 或date ...

  2. 什么是ValueStack

    转载自:http://www.cnblogs.com/zyw-205520/archive/2012/09/12/2681346.html Strut2的Action类通过属性可以获得所有相关的值,如 ...

  3. js实现下滑加载更多的效果

    var stop=true;$(window).scroll(function(){ totalheight = parseFloat($(window).height()) + parseFloat ...

  4. varnish 隐藏版本号

    varnish 隐藏方法: 修改default.vcl配置文件. 找到或添加 vcl_deliver 子程序,代码如下: 1 2 3 4 5 sub vcl_deliver {        unse ...

  5. Windows Phone 十七、Socket

    Socket 常用类型 StreamSocket:Socket对象 StreamSocketListener:Socket监听对象,适用于服务端 服务端代码 <Grid x:Name=" ...

  6. java布局学习 (一)

    Java 程序通过jvm可以很好的移植到其他平台上,但是java 生成的图形界面样式,在不使用布局的情况下,往往需要重新设定大小,才能在新的平台上调整到最佳样式.这是由于组件的最佳大小 往往是与平台相 ...

  7. htm5l,第一个script代码练习

    <body>    <canvas id="mycanvas" width="500" height="300">  ...

  8. UVA 10054 the necklace 欧拉回路

    有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...

  9. c#的逻辑运算符重载

    不光是C++,实际上C#中同样可以对操作符重载.如:namespace Com.EVSoft.Math{  public class Vector3:BaseObject  {    ...    . ...

  10. VS2013打开项目Web加载失败

    今天打开一个好久没打开过的老项目,发现web加载失败,如图: 然后重新加载项目,提示: 一开始直接在网上找答案,结果看的答案都不靠谱,只好自己动手了, 先看了 这里面是基础配置:大概看过后,又去看了提 ...