兔子与樱花---每对结点的最短路径
来源:互联网 发布:安全数据库 编辑:程序博客网 时间:2024/04/28 16:18
http://dsa.openjudge.cn/graph/0713/
总时间限制: 1000ms 内存限制: 65535kB
描述
很久很久之前,森林里住着一群兔子。有一天,兔子们希望去赏樱花,但当他们到了上野公园门口却忘记了带地图。现在兔子们想求助于你来帮他们找到公园里的最短路。
输入
输入分为三个部分。
第一个部分有P+1行(P<30),第一行为一个整数P,之后的P行表示上野公园的地点。
第二个部分有Q+1行(Q<50),第一行为一个整数Q,之后的Q行每行分别为两个字符串与一个整数,表示这两点有直线的道路,并显示二者之间的矩离(单位为米)。
第三个部分有R+1行(R<20),第一行为一个整数R,之后的R行每行为两个字符串,表示需要求的路线。
输出
输出有R行,分别表示每个路线最短的走法。其中两个点之间,用->(矩离)->相隔。
样例输入
6
Ginza
Sensouji
Shinjukugyoen
Uenokouen
Yoyogikouen
Meijishinguu
6
Ginza Sensouji 80
Shinjukugyoen Sensouji 40
Ginza Uenokouen 35
Uenokouen Shinjukugyoen 85
Sensouji Meijishinguu 60
Meijishinguu Yoyogikouen 35
2
Uenokouen Yoyogikouen
Meijishinguu Meijishinguu
样例输出
Uenokouen->(35)->Ginza->(80)->Sensouji->(60)->Meijishinguu->(35)->Yoyogikouen
Meijishinguu
#include<iostream>#include<map>#include<string>using namespace std;map<string,int> sour; // 通过地名,可以找到序号map<int ,string> yuan; // 通过序号,可以找到地名int p,q,r;#define maxn 40#define infi 1000000;class dist{public: int len; int pre;};dist D[maxn][maxn];void output(int s,int e){ if(s==e) { cout<<yuan[s]; return; } output(s,D[s][e].pre); cout<<"->"<<'('<<D[D[s][e].pre][e].len<<')'<<"->"<<yuan[e];}int main(){ string tem; cin>>p; for(int i=0;i<p;i++) { cin>>tem; sour.insert(pair<string,int>(tem,i)); yuan.insert(pair<int,string>(i,tem)); } for(int i=0;i<p;i++) { for(int j=0;j<p;j++) { if(i!=j) { D[i][j].len=infi; D[i][j].pre=-1; } else { D[i][j].len=0; D[i][j].pre=i; } } } cin>>q; string fol1,fol2; int len; for(int i=0;i<q;i++) { cin>>fol1>>fol2>>len; if(D[sour[fol1]][sour[fol2]].len>len) { D[sour[fol1]][sour[fol2]].len=len; D[sour[fol1]][sour[fol2]].pre=sour[fol1]; D[sour[fol2]][sour[fol1]].len=len; D[sour[fol2]][sour[fol1]].pre=sour[fol2]; } } int i,j,g; for(g=0;g<p;g++) { for(i=0;i<p;i++) { for(j=0;j<p;j++) { if(D[i][g].len+D[g][j].len<D[i][j].len) { D[i][j].len=D[i][g].len+D[g][j].len; D[i][j].pre=D[g][j].pre; } } } } cin>>r; for(int i=0;i<r;i++) { cin>>fol1>>fol2; output(sour[fol1],sour[fol2]); cout<<endl; } return 0;}
- 兔子与樱花---每对结点的最短路径
- 每对结点之间最短路径的C++实现
- 每对结点之间的最短路径——Floyd算法
- 兔子与樱花(map+最短路+记录路径)
- T001:兔子与樱花 最短路及路径
- 每对顶点间的最短路径之一
- 每对顶点间的最短路径之一 收藏
- 每对顶点之间的最短路径-Floyd
- 每对顶点间的最短路径C++实现
- 每对顶点的最短路径 : 基本算法
- 每对顶点的最短路径 : Floyd-Warshall 算法
- 每对顶点的最短路径 : Johnson 算法
- 每对顶点之间的最短路径
- 项目4 -- 每对顶点之间的最短路径
- 第十三周--每对顶点之间的最短路径
- 每对顶点间的最短路径C++实现
- 兔子与樱花(floyd+打印路径)
- 《算法导论》笔记(13) 单源最短路径,所有结点对的最短路径
- Cypher语言语法简介
- spark集群安装
- 集成到ReactNative的Android程序打包问题
- python爬取百度贴吧的帖子
- 408
- 兔子与樱花---每对结点的最短路径
- imwrite()
- MathJax basic tutorial and quick reference(LaTex数学公式语法)
- 创建分页Pageable变量
- 西电捷通解析物联网安全技术之鉴别技术
- 关于servlet中的cookie
- 详解http和https的作用与区别
- linux安装jdk之后,系统默认使用openjdk解决方法
- 【机器学习实战-python3】使用Apriori算法进行关联 分析