这是一道典型的最短路问题,直接用Dijkstra算法便可求解,主要是需要考虑输入的点是不是在已给出的地图中,具体看代码

 #include<bits/stdc++.h>
#define MAX 1000000
using namespace std; int dis[];//记录每个点到起始点的距离
int edge[][];//邻接矩阵
void init(){
for(int i = ; i < ; i++){
for(int j = ; j < ; j++)edge[i][j] = MAX;//邻接矩阵初始化为MAX
}
}
int Dijkstra(int size, int start, int end){
int vertex[size];
memset(vertex, , sizeof(vertex));//判断是否在已确定距离的集合里 for(int i = ; i < size; i++){
dis[i] = (i == start ? : MAX);//起始点的距离权重为0,其他为MAX
} for(int i = ; i < size; i++){
int min_dis = MAX ;
int min_v; for(int j = ; j < size; j++){//寻找最小的距离点
if(!vertex[j] && dis[j] < min_dis){
min_dis = dis[j];
min_v = j;
}
} vertex[min_v] = ;//将其加入集合 for(int j = ; j < size; j++){//更新dis距离集合
dis[j] = min(dis[j], dis[min_v] + edge[min_v][j]);
}
} if(!vertex[end]) return -;
else return dis[end]; } int main(){
int t;
cin >> t;
while(t--){
init();
int edge_num;
cin >> edge_num;
string s1, s2;
int c;
map<string, int>_map;
int v_num = ;
while(edge_num--){
cin >> s1 >> s2;
if(_map.find(s1) == _map.end())_map[s1] = v_num++;
if(_map.find(s2) == _map.end())_map[s2] = v_num++;
int a = _map[s1];
int b = _map[s2];
cin >> edge[a][b];
edge[b][a] = edge[a][b];
} cin >> s1 >> s2; if(s1 == s2) cout << '' << endl;//假如两个地点相同,输出0
else if(_map.find(s1) == _map.end() || _map.find(s2) == _map.end()) {
cout << "-1" << endl;//假如有一个地点不在给出的路径中,输出-1
}
else {
int a = _map[s1];
int b = _map[s2];
cout << Dijkstra(v_num, a, b) << endl;//输出最短路
}
}
}

Sicily 1031: Campus (最短路)的更多相关文章

  1. sicily 1031 Campus(图算法)

    Description At present, Zhongshan University has 4 campuses with a total area of 6.17 square kilomet ...

  2. tyvj 1031 热浪 最短路

    热浪 Time Limit: 1 Sec  Memory Limit: 256 MB 题目连接 http://tyvj.cn/p/1031 Description 德克萨斯纯朴的民眾们这个夏天正在遭受 ...

  3. 【tyvj】刷题记录(1001~1099)(64/99)

    1001:排序完按照题意做即可. #include<cstdio> #include<iostream> #include<cmath> #include<a ...

  4. hdu 3832 Earth Hour (最短路变形)

    Earth Hour Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 125536/65536 K (Java/Others) Tota ...

  5. HDU 6071 Lazy Running (同余最短路 dij)

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  6. HDU 6071 Lazy Running (同余最短路)

    Lazy Running Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)To ...

  7. Dijkstra TYVJ 1031热浪 Dijkstra测试数据

    测试用邻接表写得Dijkstra 代码写得很烂. 描述 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer Jo ...

  8. bzoj1001--最大流转最短路

    http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...

  9. 【USACO 3.2】Sweet Butter(最短路)

    题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...

随机推荐

  1. js特效,加速度,图标跳动

    看到一个在地图上的特效,就是标注当前位置之后,图标一直在跳动,那效果看着比较得劲,就自己写了个图标跳动的jsjs代码: setTimeout("jump()",5); var t= ...

  2. docker学习(2) mac中docker-machine使用vmware fusion以及配置国内镜像加速

    一.前言 先回顾下上一节创建docker-machine的过程,默认情况下docker toolbox中的docker-machine使用virtual box创建虚拟机,KI首次启动时创建虚拟机的过 ...

  3. [LeetCode] Design Twitter 设计推特

    Design a simplified version of Twitter where users can post tweets, follow/unfollow another user and ...

  4. [LeetCode] Encode and Decode Strings 加码解码字符串

    Design an algorithm to encode a list of strings to a string. The encoded string is then sent over th ...

  5. 两年来的core折腾之路几点总结,附上nginx启用http2拿来即用的配置

    序:一年多没更新博客园的内容了,core已经发生了翻天覆地的变化,想起2014年这时候,我就开始了从当时还叫k的那套preview都不如的vnext搭建这套系统,陆陆续续它每一次升级,我也相应地折腾, ...

  6. 尝试在你浏览器的Console(F12)中运行一下,你会发现页面被不同的颜色块高亮了(css调试中学到的js)

    现在到处都是JavaScript,每天都能知道点新东西.一旦你入了门,你总能从这里或是那里领悟到很多知识. 一旦我发现一些有意思的东西,我喜欢去感觉他们的源代码,看一看它是怎么办到的. 今天我想分享A ...

  7. 关于javascript的运动教程

    一.javascript的匀速运动 关于物体的javascript匀速运动要点分析: 1.物体关于运动的时候,我们要打开定时器 2.打开定时器的时候我们记得要在停止的时候关闭定时器,同时应该注意的是一 ...

  8. 跟着《beginning jquery》学写slider插件并借助自定义事件改进它

    <beginning jquery>是一本很不错的学习jquery的书,作者的讲解深入浅出,很适合初学者,在最后一章里面,作者把前面所有的点结合起来完成了一个轮播图的jquery插件.实现 ...

  9. vector迭代器用法

    #include<iostream> #include<vector> using namespace std; int main() { vector<int> ...

  10. Django初识

    web框架 Web应用框架有助于减轻网页开发时共通性活动的工作负荷,例如许多框架提供数据库访问接口.标准样板以及会话管理等,可提升代码的可再用性.简单地说,就是你用别人搭建好的舞台来做表演,用别人做好 ...