这是一道典型的最短路问题,直接用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. MikroTik RB750r2 操作记录

    1. 客户端的下载 http://www.mikrotik.com/download  下载 winbox 2. Reset重置密码的正确姿势 http://wiki.mikrotik.com/ind ...

  2. 台式机装原版Win2008R2

    台式机装原版Win2008R2 坑了老半天,总结出几点 1,系统os下载: http://msdn.itellyou.cn/ 注:其他地方下载的,装后发现不是起不来就是驱动装不了. 2,u盘里放个压缩 ...

  3. 【codevs1106】 篝火晚会

    http://codevs.cn/problem/1106/ (题目链接) 题意 将1~n顺序排列的环改成另一个环,问n-不动点数. Solution 啊智障啦,不会做×_× 左转hzwer 代码 / ...

  4. GreenDao的使用

    1.生成代码文件

  5. 使用css3做钟表

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. 微软 消息队列 MessageQueue 简单使用

    1.在服务电脑上打开 消息队列 ①进入控制面板>程序>启用或关闭windows功能 ②将需要的勾选(我自己全选了哈哈哈) ③我的电脑 右键 打开管理 见到消息队列 在专用队列上新建专用队列 ...

  7. JAVA面向对象

    JAVA面向对象 对象   我们生活中能看到能摸到的一切事物都是对象.在程序中模拟出生活中的所有东西万物皆对象   只要是对象--属性和行为(方法)   属性   对象有什么   例如:学生有姓名.学 ...

  8. CodeForces 698C LRU

    吐槽一句:这数据造得真强-. 题意:有一个大小为k的缓存区,每次从n种物品中按照一定的概率选取一种物品尝试放进去.同一个物品每一次选取的概率都是相同的.如果这种物品已经放进去过就不再放进去.如果缓存区 ...

  9. eclipse报错“Undefined variable from import: ...”解决方案

    环境 eclipse + pydev2.8.2 + python 3.5.1/python 2.7.11 + wxpython3.0 出现原因:原先默认解释器设置为python2,重装了pydev之后 ...

  10. linux文件文件夹递归监控

    引言 今年(2016)年初来到A公司了,刚入职的时候比较缺前端fe,就过来顶了三个月,这段时间学到了好多前端开发的知识,这些都是题外话了.期间接触了一个很好用的前端自动化部署工具 -- fis,其中有 ...