这是一道典型的最短路问题,直接用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. [LeetCode] Find Right Interval 找右区间

    Given a set of intervals, for each of the interval i, check if there exists an interval j whose star ...

  2. Anna-senpai帖子翻译与Mirai源代码使用

    Anna-senpai这个人太好玩了,整件事就像没有黄段子的无聊世界那样. 无聊翻译了一下,顺便实验了效果. --------------------------------------------- ...

  3. 使用TortoiseGit对android studio工程进行代码版本控制

    阅读下列文章时请保证你是否有以下工具: 1.Android Studio 2.TortoiseGit 和 msysGit 安卓工程版本控制哪些文件可以忽略 可以省略的文件如下: 目录 .gradle  ...

  4. android-配置文件AndroidManifest.xml

    AndroidManifest.xml 是每个android程序中必须的文件.它位于整个项目的根目录,描述了package中暴露的组件(activities, services, 等等),他们各自的实 ...

  5. vs中使用git

    vs中使用git 一.概念 Git是一个强调速度的分布式版本控制软件和源代码管理系统(SCM,source code management).Git最初是由Linus Torvalds为内核开发而设计 ...

  6. 把url参数转化成一个对象返回

    var readUrlToParams = function () { var url = location.href; var nameValue; var paraString = url.sub ...

  7. Python实战项目网络爬虫 之 爬取小说吧小说正文

    本次实战项目适合,有一定Python语法知识的小白学员.本人也是根据一些网上的资料,自己摸索编写的内容.有不明白的童鞋,欢迎提问. 目的:爬取百度小说吧中的原创小说<猎奇师>部分小说内容 ...

  8. Oracle时间戳(毫秒)转为Date

    1.SQL ) + TO_DATE('1970-01-01 08:00:00', 'YYYY-MM-DD HH:MI:SS'), 'YYYY-MM-DD HH:MI:SS') AS CDATE FRO ...

  9. Leetcode 259. 3Sum Smaller

    class Solution(object): def threeSumSmaller(self, nums, target): """ :type nums: List ...

  10. 真正解决vbox不能为虚拟电脑打开一个新任务的解决方法

    今天小编电脑上出现了一个问题,如上图,经过了一个朋友的帮助终于问题解决了,解决方法: 在每一个中把 红框中打上勾号即可