0006:floyd求最短路径 水题
2016-05-14 12:02
435 查看
0006:floyd求最短路径
查看提交统计提问总时间限制: 10000ms 内存限制: 1000kB描述给出一个有向图的结构,求所有顶点间的最短路径输入若干行整数,第一行有2个数,分别为顶点数v和弧数a,接下来有a行,每一行有3个数,分别是该条弧所关联的两个顶点编号和弧的权值输出若干行每行第一个为一个整数,为最短路径值,其余为若干个空格隔开的顶点构成的最短路径序列(用小写字母)若无最短路径,直接输出no answer样例输入3 5 0 1 4 0 2 11 1 0 6 1 2 2 2 0 3样例输出
4 v0 v1 6 v0 v1 v2 5 v1 v2 v0 2 v1 v2 3 v2 v0 7 v2 v0 v1
#include "iostream"#include "stack"using namespace std;#define Sky 9999#define Max 105int Top,Edge,Map[Max][Max];int Path[Max][Max];void Dfs(int x,int y){int k=Path[x][y];if(k==-1) return;Dfs(x,k);cout<<"v"<<k<<" ";Dfs(k,y);}void Floyd(){int i,j,k;for(k=0;k<Top;k++)for(j=0;j<Top;j++)for(i=0;i<Top;i++){if(k==j || k==i || i==j) continue;if(Map[i][j]>Map[i][k]+Map[k][j]){Map[i][j]=Map[i][k]+Map[k][j];Path[i][j]=k;}}bool Flag=false;for(i=0;i<Top;i++)for(j=0;j<Top;j++){if(Map[i][j]!=Sky){Flag=true;cout<<Map[i][j]<<" ";cout<<"v"<<i<<" ";Dfs(i,j);cout<<"v"<<j<<" "<<endl;}}if(Flag==false)cout<<"no answer"<<endl;}int main(){//freopen("1.txt","r",stdin);while(cin>>Top>>Edge && Top!=0){int i,j;for(i=0;i<Top;i++)for(j=0;j<Top;j++){Map[i][j]=Sky;Path[i][j]=-1;}for(i=1;i<=Edge;i++){int x,y,z;cin>>x>>y>>z;Map[x][y]=z;}Floyd();}return 0;}[/code]
相关文章推荐
- Runtime 运行时:方法与消息
- cordova新建android工程
- robot_pose_ekf 使用说明
- 匹配注释的正则表达式
- Linux makefile 教程
- Spark入门实战系列--8.Spark MLlib(下)--机器学习库SparkMLlib实战
- Spark入门实战系列--8.Spark MLlib(上)--机器学习及SparkMLlib简介
- PHP之:PHP编程效率的20个要点
- Mysql存储过程优化——使用临时表代替游标
- select option ng-repeat多空白项
- Spark入门实战系列--7.Spark Streaming(下)--实时流计算Spark Streaming实战
- 【LeetCode】330. Patching Array
- 有感
- iOS开发——静态库的导入和头文件路径的设置
- Android开发艺术探索 第十章 学习
- CS231n笔记3--Gradient Descent与Backward Propagation
- <<web>>3d 相册
- Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍
- [leetcode] 65. Valid Number 解题报告
- 百度浏览器使用率统计