佛洛依德 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实现
一,问题描述 给出一个无向图,指定无向图中某个顶点作为源点.求出图中所有顶点到源点的最短路径. 无向图的最短路径其实是源点到该顶点的最少边的数目. 本文假设图的信息保存在文件中,通过读取文件来构造图. ...
随机推荐
- 发布Live Writer代码着色插件CNBlogs.CodeHighlighter
在解决了使用Windows Live Writer发博所遇到的"建分类.加标签.写摘要"与"设置EntryName"的四个问题之后,我们趁热打铁,解决了第五个问 ...
- Flash+fms视频录制在项目中的实际应用
Flash+fms视频录制在项目中的实际应用 前言:以下只是记录本人在项目中的应用,而flash+fms视频录制有多种实现方式,具体可根据实际情况而定! 1:古人云:工欲善其事,必先利其器,首先安装f ...
- windows环境,idea的Terminal每次输入git命令都要提示输入用户名,密码
打开本地的这个目录(以上图片所示) 以我本地项目为例: 项目根目录下-->.git-->config文件 找到[remote "origin"]下url,更改其为htt ...
- linux–nohup命令(转)
在应用Unix/Linux时,我们一般想让某个程序在后台运行,于是我们将常会用 & 在程序结尾来让程序自动运行.比如我们要运行mysql在后台: /usr/local/mysql/bin/my ...
- 用BlazeMeter录制JMeter测试脚本
工具: 1,JMeter 2,Chrome 3,BlazeMeter 4,SwitchyOmega(如果需要代理) 步骤: 以上工具准备好以后就可以录制JMeter的测试脚本了, 在Chrome中点击 ...
- Peter Norvig:自学编程,十年磨一剑
若要在某一领域内达到专家级的水平,其关键在于"审慎地重复",也就是说,并非是机械地,一遍又一遍地练习,而是要不断地挑战自我,试图超越自身当前的水平,通过不断的尝试挑战,并在尝试的过 ...
- MVC中的成员资格,授权,安全性
使用 Authorize 特性登录 Authorize 是 ASP.NET MVC 自带的默认授权过滤器, 可用来限制用户对操作方法的访问. 保护控制器操作 Authorize 特性在表单身份验证和 ...
- angularJS 按需加载
之前做应用的时候都会在首页就把全站的js预先加载进来... 怎么实现按需加载? 首先在$routeProvider里面加resolve属性,angular-route提供的resolve功能,也就是路 ...
- oracle 9i相关问题
Oracle 9i在连接数据库的时候需要加上双引号,如sqlplus “sys/oracle@orcl as sysdba” Oracle 9i不支持bigfile大的表空间创建,oracle9i或以 ...
- Eclipse版本android 65535解决方案(原理等同android studio现在的分包方式)
由于工作的需要看了下Eclipse下android65535的解决方案,查了好多文档,真心的发自内心的说一句请不要再拷贝别人的博客了,害人,真害人. 接下来我说下我的实现方式,首先说下65535的最可 ...