Sicily 1031: Campus (最短路)
这是一道典型的最短路问题,直接用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 (最短路)的更多相关文章
- sicily 1031 Campus(图算法)
Description At present, Zhongshan University has 4 campuses with a total area of 6.17 square kilomet ...
- tyvj 1031 热浪 最短路
热浪 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://tyvj.cn/p/1031 Description 德克萨斯纯朴的民眾们这个夏天正在遭受 ...
- 【tyvj】刷题记录(1001~1099)(64/99)
1001:排序完按照题意做即可. #include<cstdio> #include<iostream> #include<cmath> #include<a ...
- hdu 3832 Earth Hour (最短路变形)
Earth Hour Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Tota ...
- HDU 6071 Lazy Running (同余最短路 dij)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- HDU 6071 Lazy Running (同余最短路)
Lazy Running Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Others)To ...
- Dijkstra TYVJ 1031热浪 Dijkstra测试数据
测试用邻接表写得Dijkstra 代码写得很烂. 描述 德克萨斯纯朴的民眾们这个夏天正在遭受巨大的热浪!!!他们的德克萨斯长角牛吃起来不错,可是他们并不是很擅长生產富含奶油的乳製品.Farmer Jo ...
- bzoj1001--最大流转最短路
http://www.lydsy.com/JudgeOnline/problem.php?id=1001 思路:这应该算是经典的最大流求最小割吧.不过题目中n,m<=1000,用最大流会TLE, ...
- 【USACO 3.2】Sweet Butter(最短路)
题意 一个联通图里给定若干个点,求他们到某点距离之和的最小值. 题解 枚举到的某点,然后优先队列优化的dijkstra求最短路,把给定的点到其的最短路加起来,更新最小值.复杂度是\(O(NElogE) ...
随机推荐
- jquery 监听常用监听方法
最近在做网站开发,需要用到不少js的知识.之前学过现在重新来看,发现还真忘了不少~~ 在使用基于bootstrap,或者基于 jquery 的插件时,如过没有出现预期效果 请最先检查下是否优先载入的 ...
- Linux工具入门:make工具与Makefile文件
1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译 ...
- Web Application Penetration Testing Local File Inclusion (LFI) Testing Techniques
Web Application Penetration Testing Local File Inclusion (LFI) Testing Techniques Jan 04, 2017, Vers ...
- 简单的maven配置
groupId是指com.xx 组织标识 artifactId才是项目名称 2)编译源代码 mvn compile 3)编译测试代码 mvn test-compile 4)清空 mvn clean 5 ...
- Linux sudo 命令的应用
.note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...
- WKWebView与JavaScript交互基础
login.html 代码 <!DOCTYPE html> <html> <head> <title>使用JavaScript</title> ...
- 后台动态添加的button,如何触发button_click事件?
后台动态添加的button,需要在Page_Load或者Page_Init重新动态生成才能执行button_click public Panel GetContrlType() { Panel pan ...
- jquery复选框checkbox实现删除
实现这样一个基本需求,页面有很多数据,可以删除一条或多条,删除前判断是否选中至少一条,否则提示. function deleteUser() { //当时是想把内容以str+="" ...
- 浅谈Android样式开发之shape
引言 在Android开发中我们很多情况都是使用图片来展示相关效果,今天我就来详细介绍下Android下使用Shape来进行简单UI的开发.一方面这些是Android开发的基础,另一方面这方面的知识可 ...
- Echarts 饼图标题文字换行问题
var option = { title : { text: '数据来源', x:'center' }, tooltip : { trigger: 'item', formatter: "{ ...