此题主要是要用到字符串向整数的映射 , 很自然的想到了 STL 中的map ,哎,贡献无数次WA,最后才发现每次运行时 map 忘了清空 !!!!本题,用dijkstra 和 spfa 均可 ,但是要记着提交时用C++ ,用G++的话可能会超时。 此题为无向图,还应注意当出发站和终点站相同时输出 0 !!我用dijkstra 和 spfa 均能过,请看代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<cmath>
#include<map>
using namespace std ;
const int MAXN = 1005 ;
const int INF = 0x7fffffff ;
struct Node
{
int adj ;
int dist ;
Node * next ;
};
int cnt ;
Node *vert[MAXN] ; // 建立顶点头指针数组
int vis[MAXN] ;
int dis[MAXN] ; // 建立距离数组
map<string , int> mymap ;
void dijkstra(int v0)
{
int i ;
for ( i = 1 ; i <= cnt ; i ++)
{
dis[i] = INF ;
}
dis[v0] = 0 ;
vis[v0] = 1 ;
int min = INF ;
int u = v0 ;
Node * p ;
for (i = 1 ; i <= cnt - 1 ; i ++)
{
p = vert[u] ;
while (p != NULL)
{
int ty = p -> adj ;
int td = p -> dist ;
if(!vis[ty] && dis[u] + td <= dis[ty])
{
dis[ty] = dis[u] + td ;
}
p = p -> next ;
}
int j ;
min = INF ;
for(j = 1 ; j <= cnt ; j ++)
{
if(!vis[j] && dis[j] < min)
{
u = j ;
min = dis[j] ;
}
}
vis[u] = 1 ;
}
}
queue <int> mq ;
int inq[MAXN] ;
void spfa(int v0)
{
memset(inq , 0 , sizeof(inq)) ;
while (!mq.empty()) // 队列清空
mq.pop() ;
mq.push(v0) ;
inq[v0] ++ ;
int tmp ;
Node * p ;
int i ;
for( i = 1 ; i <= cnt ; i ++)
{
dis[i] =INF ;
}
dis[v0] = 0 ;
while (!mq.empty())
{
tmp = mq.front() ;
mq.pop() ;
inq[tmp] -- ;
p = vert[tmp] ;
while (p != NULL)
{
int tadj = p -> adj ;
int td = p -> dist ;
int tk ;
tk = dis[tmp] + td ;
if(dis[tmp] < INF && tk < dis[tadj] )
{
dis[tadj] = tk ;
if(inq[tadj] == 0)
{
mq.push(tadj) ;
inq[tadj] ++ ;
}
}
p = p -> next ;
}
} }
int main()
{
int n ;
while (scanf("%d", & n) != EOF)
{
if(n == -1)
break ;
memset(vis , 0 , sizeof(vis)) ;
memset(vert , 0 , sizeof(vert)) ;
mymap.clear() ; // 千万不要忘了把 map 清空 !!
cnt = 0 ;
string s1 , s2 ;
cin >> s1 ;
mymap[s1] = ++ cnt ;
cin >> s2 ;
int pan = 0 ;
if(s1 == s2)
{
pan = 1 ;
}
else
mymap[s2] = ++ cnt ;
int i ;
for (i = 0 ; i < n ; i ++)
{
string st1 ;
string st2 ;
int d ;
cin >> st1 >> st2 >> d ;
if(mymap.find(st1) == mymap.end())
{
mymap[st1] = ++ cnt ;
}
if(mymap.find(st2) == mymap.end())
{
mymap[st2] = ++ cnt ;
}
int t1 , t2 ;
t1 = mymap[st1] ;
t2 = mymap[st2] ;
Node * p ;
p = new Node ; // 建立邻接表
p -> adj = t2 ;
p -> dist = d ;
p -> next = vert[t1] ;
vert[t1] = p ; p = new Node ;
p -> adj = t1 ;
p -> dist = d ;
p -> next = vert[t2] ;
vert[t2] = p ;
}
if(pan == 1)
{
printf("0\n") ;
continue ;
}
//dijkstra(1) ;
spfa(1) ;
if(dis[2] < INF)
{
printf("%d\n" , dis[2]) ;
}
else
{
printf("-1\n") ;
}
}
return 0 ;
}

HDU 2112 HDU Today -- from lanshui_Yang的更多相关文章

  1. hdu 2112 HDU Today

    题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的 ...

  2. HDU 2112 HDU Today(Dijkstra)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 HDU Today Time Limit: 15000/5000 MS (Java/Others ...

  3. hdu 2112 HDU Today (floyd算法)

    这道题貌似在原来学长给我们的搞的小比赛中出过! 这次又让我遇到,果断拿下! 不过方法很蠢,跑了1000多ms,虽然要求5000ms以内! 题目就是给你一些位置之间的距离,然后再让你求特定的两点之间的距 ...

  4. hdu 2112 HDU Today (最短路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目大意:给出起点和终点,然后算出最短的路. 不过有好多细节要注意: (1)起始点和终止点相等的 ...

  5. hdu 2112 HDU Today 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2112 题目意思:又是求最短路的,不过结合埋字符串来考查. 受之前1004 Let the Balloo ...

  6. HDU 2112 HDU Today (Dijkstra算法)

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

  7. HDU 2112 HDU Today(最短路径+map)

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

  8. HDU 2112 HDU Today 最短路

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

  9. hdu 2112 HDU Today(map与dijkstra的结合使用)

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

随机推荐

  1. nyist 737 相邻石子合并问题

    http://acm.nyist.net/JudgeOnline/problem.php?pid=737 动态规划状态方程: dp[i][j]=d[i][k]+dp[k+1][j]+(sum[k]-s ...

  2. 锋利的JQuery-Jquery中DOM操作

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  3. many-to-one和one-to-many的配置比较

    many-to-one配置: <many-to-one name="dailyCatalog" column="daily_catalog_id" cla ...

  4. Birt时间参数添加My97日历控件

    首先,思路: 引用My97.js然后为时间参数的textbox添加onclick事件 1.将My97添加到项目中的webcontent目录下(如图:) 2.添加My97引用 在项目路径下找到该文件\w ...

  5. Spring MVC 教程

    目录  一.前言二.spring mvc 核心类与接口三.spring mvc 核心流程图 四.spring mvc DispatcherServlet说明 五.spring mvc 父子上下文的说明 ...

  6. RMAN备份与恢复实例

    1. 检查数据库模式:   sqlplus /nolog    conn /as sysdba   archive log list (查看数据库是否处于归档模式中) 若为非归档,则修改数据库归档模式 ...

  7. (转)MySQL数据库引擎ISAM MyISAM HEAP InnoDB的区别

    转自:http://blog.csdn.net/nightelve/article/details/16895917 MySQL数据库引擎取决于MySQL在安装的时候是如何被编译的.要添加一个新的引擎 ...

  8. CSS3 Transitions, Transforms和Animation使用简介与应用展示

    CSS3 Transitions, Transforms和Animation使用简介与应用展示 by zhangxinxu from http://www.zhangxinxu.com本文地址:htt ...

  9. 全文检索- Oracle/MySql/达梦

    简单使用语法: MySql: ALTER TABLE dataset_ods ENGINE = MyISAM; //5.6后的InnoDB支持全文索引 ALTER TABLE dataset_ods ...

  10. openstack学习线路指导

    原文链接: http://www.aboutyun.com/thread-7225-1-1.html 网上很多hadoop资料,openstack资料相对较少,这里整理一下,帮助初学者尽快入门. 首先 ...