HDU Today HDU杭电2112【Dijkstra || SPFA】
这时候,XHD夫妇也退居了二线。并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,開始安度晚年了。
这样住了一段时间。徐总对当地的交通还是不太了解。
有时非常郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(事实上徐总自己有车,却一定要与民同乐。这就是徐总的性格)。
徐总常常会问蹩脚的英文问路:“Can you help me?
”。
看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(如果每一路公交车都仅仅在起点站和终点站停,并且随时都会开)。
第二行有徐总的所在地start。他的目的地end;
接着有n行。每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每一个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
假设N==-1,表示输入结束。
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
50 Hint:
The best route is:
xiasha->ShoppingCenterofHangZhou->supermarket->westlake 尽管偶尔会迷路。可是由于有了你的帮助
**和**从此还是过上了幸福的生活。 ――全剧终――
#include<stdio.h>
#include<string.h>
#include<string>
#include<map>
#define INF 0x3f3f3f3f
#define N 110
using namespace std;
int Map[N][N];
int dis[10100];
bool used[10100];
int n;
int i,j;
void dijkstra(int u)
{
memset(used,0,sizeof(used));
memset(dis,INF,sizeof(dis));
int pos=u;
for(i=1;i<=100;++i)//第一次给dis赋值
{
dis[i]=Map[u][i];
}
dis[u]=0;
used[u]=1;
for(i=1;i<100;++i)//最多执行一百次,由于最多有一百个公交车站
{
int min=INF;
for(j=1;j<=100;++j)
{
if(!used[j]&&dis[j]<min)
{
min=dis[j];
pos=j;
}
}
used[pos]=1;
dis[pos]=min;
for(j=1;j<=100;++j)//把dis数组更新,也叫松弛
{
if(!used[j]&&dis[j]>Map[pos][j]+dis[pos])
{
dis[j]=Map[pos][j]+dis[pos];
}
}
} }
int main()
{
int m;
int u,v,w;
char s1[50],s2[50];
while(scanf("%d",&n),n!=-1)
{
for(i=1;i<=100;++i)
for(j=1;j<=i;++j)
Map[i][j]=Map[j][i]=INF;
map<string,int>mp; scanf("%s%s",s1,s2);
bool flag=0;
if(strcmp(s1,s2)==0) flag=1;
mp[s1]=1;
mp[s2]=2;
int num=3;
while(n--)
{
scanf("%s%s%d",s1,s2,&w);
if(!mp[s1]) mp[s1]=num++;//假设没用过
if(!mp[s2]) mp[s2]=num++; Map[mp[s1]][mp[s2]]=Map[mp[s2]][mp[s1]]=w;
}
if(flag) printf("0\n");
else
{
dijkstra(1);
if(dis[2]==INF) printf("-1\n");
else
printf("%d\n",dis[2]);
}
}
return 0;
}
//SPFA
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <map>
#include<queue>
#define M 300
#define INF 0x3f3f3f3f
using namespace std;
int Map[M][M];
int s=0, e=1;
int low[10010];
bool vis[10010];
void SPFA()
{
int i, j;
queue<int> Q;
memset(low, INF, sizeof(low));
memset(vis, 0, sizeof(vis));
vis[1] = 1;
low[1] = 0;
Q.push(1);
while(!Q.empty())
{
int u = Q.front();
Q.pop();
vis[u] = 0;//出队列了。不在队列就变成0
for(i = 1; i <= 100; ++i)
{ if(low[i] > low[u] + Map[u][i])
{
low[i] = low[u] + Map[u][i];
if(!vis[i])
{
vis[i]=1;
Q.push(i);
}
}
}
}
if(low[2] == INF) printf("-1\n");
else printf("%d\n",low[2]);
}
int main()
{
int N;
char s1[40], s2[40];
int u, v, w;
while(scanf("%d",&N) && N != -1)
{
map<string,int>mp;
int flag=0;
for(int i=1;i<=100;++i)
for(int j=1;j<=i;++j)
Map[i][j]=Map[j][i]=INF;
scanf("%s%s",s1,s2);
if(strcmp(s1,s2)==0) flag=1;
mp[s1]=1;
mp[s2]=2;
int num=3;
while(N--)
{
scanf("%s%s%d",s1,s2,&w);
if(!mp[s1]) mp[s1]=num++;
if(!mp[s2]) mp[s2]=num++;
Map[mp[s1]][mp[s2]]=Map[mp[s2]][mp[s1]]=w;
}
if(flag)
{
printf("0\n");
continue;
}
SPFA();
}
return 0;
} /*
6
xiasha xiasha
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10 0
*/
HDU Today HDU杭电2112【Dijkstra || SPFA】的更多相关文章
- hdu 1290_献给杭电五十周年校庆的礼物
Description 或许你曾经牢骚满腹或许你依然心怀忧伤或许你近在咫尺或许你我天各一方 对于每一个学子母校 永远航行在生命的海洋 今年是我们杭电建校五十周年,这是一个值得祝福的日子.我们该送给母校 ...
- HDU 1290 献给杭电五十周年校庆的礼物(面分割空间 求得到的最大空间数目)
传送门: 献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...
- HDU 4940(杭电更多的学校#7 1006) Destroy Transportation system(到处乱混)
职务地址:pid=4940">HDU 4940 当时这个题一看就看出来了是网络流的最小割.然后就一直在想建图. .然后突然发现,应该要让T集合的数目最少,不然仅仅要有两个,那这两个的每 ...
- HDU 4920(杭电多校训练#5 1010 题) Matrix multiplication(不知道该挂个什么帽子。。。)
题目地址:pid=4920">HDU 4920 对这个题简直无语到极点. . .竟然O(n^3)的复杂度能过....方法有三.. 1:进行输入优化和输出优化. . (前提是你的输入优化 ...
- Age of Moyu HDU - 6386 (杭电多校7A)
给出n和点,m条边,每条边有各自的标号,进入第一个标号需要消耗1的费用,此后转换标号需要1费用,在同一个标号上走不需要费用.问你从1到n最少需要多少费用. 最短路变形,把第一个点看成不存在的标号,然后 ...
- 【HDU】4908 (杭电 BC #3 1002题)BestCoder Sequence ——哈希
BestCoder Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- HDU 1290 献给杭电五十周年校庆的礼物
题解:http://www.cnblogs.com/forever97/p/3522238.html #include <cstdio> int main() { int n; while ...
- GuGuFishtion HDU - 6390 (杭电多校7E)
啊啊啊啊...全在纸上 字丑...算了算了 然后除法部分都用逆元就好了 还有逆元打表....学到了...牛逼 #include<map> #include<set> #incl ...
- Balanced Sequence HDU - 6299(杭电多校1 B)
题目说要n个字符串串内随意组合以后将这些串放在一起,然后求最长的括号匹配的长度,并不要求是连续的 因为不需要是连续的,所以可以先把已经匹配好的括号加入到答案里面去,先把这些删掉,以为并不影响结果,然后 ...
随机推荐
- pycharm 编写前端代码一些小技巧
<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8&qu ...
- SQLSTATE=2300
在powerdesigner将表的结构运用于数据库的时候报的错. 目标: 在Hibernate中使用多表级联的插入操作. 解决办法: 将navicat中的mysql数据库表删除, 手动创建 原因: p ...
- JSP的九大对象和四大作用域
1.JSP中九大内置对象为: request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request ...
- IIS+php服务器无法上传图片解决办法
查找网上资料,发现php.ini下面有2个地方关于上传的配置: file_uploads = On 这里设置是否允许HTTP上传,默认应该为ON的 ;upload_tmp_dir= 这里设置上传文 ...
- Python 判断是否存在Excel表
Python 判断是否存在Excel表,无则生成,有则删除重建 import os import xlwt from openpyxl import workbook def sheet_method ...
- ios打电话发短信接口
电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...
- python3.x Day6 paramiko
python3 paramiko模块,用来进行远程操作linux服务器,利用的就是ssh #利用用户名,密码,进行连接 import paramiko #创建一个SSH对象 ssh=paramiko. ...
- selenium的三种等待
1. 强制等待 最简单粗暴,sleep(xx),不管你浏览器是否加载完了,程序都得等待xx秒,时间一到,再继续执行下面的代码,作为调试很有用,有时候也可以在代码里这样等待,不过不建议总用这种等待方式, ...
- 使用js生成条形码以及二维码
一.用js生成条形码这种业务场景不是很常见的,最近刚好又接到这种需求 Google一下,发现github还真有这方面的轮子,感谢github,省去了我们很多造轮子的过程, 好了言归正传,首先引入jsb ...
- 杭电 2035 (快速幂) 求A^B的最后三位数表示的整数
Description 求A^B的最后三位数表示的整数. 说明:A^B的含义是“A的B次方” Input 输入数据包含多个测试实例,每个实例占一行,由两个正整数A和B组成(1<=A,B&l ...