//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. android获取textview的行数

    最近项目需求,需要获取Textview的行数,通过行数与TextView的maxLines进行比较来确定是否显示TextView下方的展开按钮是否显示,废话少说直接上代码,mTextView.getL ...

  2. Linux配置notes

    终端支持中文输入: locale-gen en_US.UTF-8 export PYTHONIOENCODING=utf-8 export LANG="en_US.UTF-8" e ...

  3. AVD之PANIC: Could not open

    1 原因一:因为我们采用的是绝对路径定位,也就是说在环境变量里面把路径写死了,所以安装都不同,路径读不出来. 解决办法:①在环境变量中创建变量名:ANDROID_SDK_HOME,变量值:你当时安装S ...

  4. Design and Analysis of Algorithms_Divide-and-Conquer

    I collect and make up this pseudocode from the book: <<Introduction to the Design and Analysis ...

  5. JAVA静态代码审查之checkstyle

    技术总监来巡查,刚巧前段时间遇到了一个问题还没解决,就拉着大牛开问.结果,问题是解决了,还附带了另一个问题,或是要求出来,没啥技术含量,但是很麻烦的一个东西:代码格式. 之前我写代码,因为屏幕比较小, ...

  6. FreeBSD 查看硬件信息

    systat 能实时查看各种信息 systat -pigs 默认值CPU systat -iostat 硬盘IO systat -swap 交换分区 systat -mbufs 网络缓冲区 systa ...

  7. Java操作excel

    慕课网的好课程: http://www.imooc.com/learn/354

  8. HDU-1274 展开字符串

    Problem Description 在纺织CAD系统开发过程中,经常会遇到纱线排列的问题.该问题的描述是这样的:常用纱线的品种一般不会超过25种,所以分别可以用小写字母表示不同的纱线,例如:abc ...

  9. swift基础:第六部分:类与对象

    http://reactnative.cn/docs/0.24/getting-started.html#content(react Native 开发文档) 互联网这个时代,你松懈一天,就会有很多很 ...

  10. html 关键字设定

    <meta name="description" content="仡家油茶仡家油茶仡家油茶仡家油茶"> <meta name="k ...