这题的关键是把车站的名字转化为点的编号。我用的是map。声明一个map<string,int> st,然后按照字符串出现的次序给st赋值。例如:st[s1]=2;代表这字符串s1出现的次序是2。出现过的已经被标记。不会重复。接下来用模版就好。不过有一点要注意的是当起点和终点一样是,要输出0。

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<map>
#include<algorithm>
using namespace std; //在主函数中Map初始化为INF
const int N = , INF =0x3f3f3f3f;
int dist[N], Map[N][N], pre[N];
//dist表示i到s的最短距离,Map记录图,pre记录前驱
bool p[N];//标记点是否已经被选择
void Dijkstra(int n,int s)
{
int i,j,k, MIN;
for(i=; i<=n; i++) //初始化
{
p[i]=;
if(i!=s)
{
dist[i]= Map[s][i];
pre[i]=s;
}
}
dist[s]=;
p[s]=;
for(i=; i<n; i++) //循环n-1次
{
MIN=INF;
k=;
for(j=; j<=n; j++)
{
if(!p[j]&&dist[j]<MIN)
{
MIN= dist[j];
k=j;
}
}
if(!k) return ;//没有点可以扩展
p[k]=; //将k从Vb中除去,加入Va
for(j=; j<=n; j++)
{
if(!p[j]&&Map[k][j]!=INF&&dist[j]>dist[k]+Map[k][j])
{
dist[j]= dist[k] + Map[k][j];
pre[j]=k;
}
}
}
}
void init()
{
for(int i=;i<=N;i++)
for(int j=;j<=N;j++)
Map[i][j]=INF;
}
map<string,int> st;
int main()
{
//freopen("test.txt","r",stdin);
int n,i,j,k;
char s1[],s2[];
while(scanf("%d",&n)!=EOF)
{
if(n==-) break;
scanf("%s%s",s1,s2);
if(strcmp(s1,s2)==) {
for(i=;i<n;i++)
scanf("%s%s%d",s1,s2,&k);
printf("0\n");
continue;
}
init();
st.clear();
st[s1]=; st[s2]=;
j=;
for(i=;i<n;i++)
{
scanf("%s%s%d",s1,s2,&k);
if(st[s1]==) st[s1]=++j;
if(st[s2]==) st[s2]=++j;
if(st[s1]==st[s2]) continue;
Map[st[s2]][st[s1]]=Map[st[s1]][st[s2]]=min(k,Map[st[s1]][st[s2]]);
}
Dijkstra(j,);
if(dist[]<INF)
printf("%d\n",dist[]);
else printf("-1\n"); }
return ;
}

hdu2112 HDU Today 基础最短路的更多相关文章

  1. hdu2112(HDU Today 简单最短路)

    Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这时候,XHD ...

  2. hdu 4568 Hunter 最短路+dp

    Hunter Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  3. HDU 2509 基础Anti-SG NIM

    如果我们规定当局面中所有的单一游戏的SG值为0时,游戏结束,则先手必胜当且仅当:(1)游戏的SG!=0 && 存在单一游戏的SG>1:(2)游戏的SG==0  && ...

  4. HDU 3537 基础翻硬币模型 Mock Turtles 向NIM转化

    翻硬币游戏,任意选3个,最右边的一个必须是正面.不能操作者败. 基本模型..不太可能自己推 还是老实记下来吧..对于单个硬币的SG值为2x或2x+1,当该硬币的位置x,其二进制1的个数为偶数时,sg= ...

  5. HDU 2188 基础bash博弈

    基础的bash博弈,两人捐钱,每次不超过m,谁先捐到n谁胜. 对于一个初始值n,如果其不为(m+1)的倍数,那么先手把余数拿掉,后继游戏中不管如何,后手操作后必定会有数余下,那么先手必胜,反之后手必胜 ...

  6. HDU 2176 基础NIM 输出方案

    普通的NIM,然后问先手必胜第一次操作后的所有局面. 对于一个必胜局面只要转变局面SG值为必败(SG=0)留给后手就行了. /** @Date : 2017-10-13 21:39:13 * @Fil ...

  7. HDU2112 HDU Today 最短路+字符串哈希

    HDU Today Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. Hdu-2112 HDU Today (单源多点最短路——Dijsktra算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给你N个公交车站,起点,终点,各站之间的距离,求起点到终点之间的最短距离.(起点终点相 ...

  9. hdu - 2066 一个人的旅行(基础最短路)

    http://acm.hdu.edu.cn/showproblem.php?pid=2066 把与草儿相连的城市最短距离置为0,然后进行dijkstra,在t个城市里找出距离最近的一个即可. #inc ...

随机推荐

  1. Java通过接口实现匿名类的实例

    package com.chase.test; /** * 通过接口实现匿名类的实例 * * @author Chase * * @date 2013-10-18 下午04:28:17 * * @ve ...

  2. Java---23种设计模式(九)------组合模式

    一.什么是组合模式 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象. 组合模式依据树形结构来组合对象,用来表示部分以及整体层次. 这种类型的 ...

  3. Python实现ATM+购物商城

    需求: 模拟实现一个ATM + 购物商城程序 额度 15000或自定义 实现购物商城,买东西加入 购物车,调用信用卡接口结账 可以提现,手续费5% 每月22号出账单,每月10号为还款日,过期未还,按欠 ...

  4. scrapy-redis 之处理异常

    今天心情不好 不想多打字 自己看注释吧 from scrapy.http import HtmlResponse from twisted.internet import defer from twi ...

  5. 一个vue模拟键盘的组件

    如图所示下载地址

  6. SpringBoot背景

    1.SpringBoot的产生背景:随着spring日益发展,丰富的框架和组件大大简化了java项目开发过程,经过多年的实践,得到了很多人的认可,但是Spring的严重依赖XML配置文件,严重导致项目 ...

  7. linux 中,mysql数据库备份操作

    1.新建一个sh脚本(可以先建一个txt文本,然后改为sh文件). 代码如下: #!/bin/bash #设置mysql备份目录 folder=/**/** cd $folder day=`date ...

  8. 08.Web服务器-3.Web静态服务器

    1.显示固定的页面 from socket import * from multiprocessing import * import os def handleClient(clientSocket ...

  9. 58.fetch phbase

    1.fetch phbase工作流程 The coordinating node identifies which documents need to be fetched and issues a ...

  10. 编码GBK和GB2312、Unicode、UTF-8

    一.编码GBK和GB2312 随着计算机发展,各国已经不满足于单纯用ASCII码: 对于我们来说能在计算机中显示中文字符是至关重要的,所以我们还需要一张关于中文和数字对应的关系表: 一个字节8位二进制 ...