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个字符串串内随意组合以后将这些串放在一起,然后求最长的括号匹配的长度,并不要求是连续的 因为不需要是连续的,所以可以先把已经匹配好的括号加入到答案里面去,先把这些删掉,以为并不影响结果,然后 ...
随机推荐
- bzip2 一种块排序文件压缩软件
总览 bzip2 [ -cdfkqstvzVL123456789 ] [ filenames ... ] bunzip2 [ -fkvsVL ] [ filenames ... ] bzcat [ - ...
- mysql5.7 this is incompatible with sql_mode=only_full_group_by错误
解决办法: https://blog.csdn.net/qq_42175986/article/details/82384160 前言: 一.原理层面 这个错误发生在mysql 5.7 版本及以上版本 ...
- Vue+Bootstrap实现购物车程序(1)
先看下案例效果:(简单的数量控制及价格运算) 代码: <!DOCTYPE html> <html> <head lang="en"> <m ...
- snowflake机器标识自动绑定
首先附上snowflake源码 package com.yunyihenkey.common.idworker; /** * Twitter_Snowflake<br> * SnowFla ...
- JS授权
(function(){ var origin_url = location.href; var oauth_url = 'https://vx.mcilife.com/weixin/api/oaut ...
- Chrome插件:微信公众号自动登录(chrome.extension)
manifest.json: { "manifest_version": 2, "name": "WX.AutoLogin", " ...
- jq进度条
<!doctype html><html><head><meta charset="utf-8"><title>JQue ...
- Python之基础练习题
Python之基础练习题 1.执行 Python 脚本的两种方式 2.简述位.字节的关系 解:8位是一个字节 3.简述 ascii.unicode.utf-8.gbk 的关系 4.请写出 “李杰” 分 ...
- rbac组件之权限初始化(五)
当用户登陆后,根据用户的角色要为用户生成对应的权限菜单,此时需要将登陆的用户信息获取且获取角色信息,从数据库中获取菜单以及权限信息,并且存入session中. 1.权限流程 第一次请求的页面是登陆页面 ...
- 集训第四周(高效算法设计)L题 (背包贪心)
Description John Doe is a famous DJ and, therefore, has the problem of optimizing the placement of ...