HDU-2112 HDU Today

   http://acm.hdu.edu.cn/showproblem.php?pid=2112

怎样把具体的字母的地点转换为数字的函数为题目的重点

                         HDU Today

Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11385    Accepted Submission(s): 2663

Problem Description
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。 这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。 徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗? 请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
Input
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000); 第二行有徐总的所在地start,他的目的地end; 接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。 note:一组数据中地名数不会超过150个。 如果N==-1,表示输入结束。
Output
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
Sample Input
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
Sample Output
50
Hint:
The best route is: xiasha->ShoppingCenterofHangZhou->supermarket->westlake
虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。
――全剧终――
Author
lgx
Source
ACM程序设计_期末考试(时间已定!!)
Recommend
lcy
这是我参考别人的代码过的:
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define maxint 0xfffffff
 4 int map[160][160], visited[160], n, m, s, e;
 5 long dis[160];
 6 char name[160][32];
 7 int find(char str[32])
 8 {
 9     int i;
10     for(i = 1; i <= m; ++i){
11         if(strcmp(name[i], str) == 0)
12             return i;
13     }
14     if(m == 0 || i > m){
15         ++m;
16         strcpy(name[m], str);
17         return m;
18     }
19 }//函数的写法。
20 void dijkstra(int s, int e)
21 {
22     int i, j, mid;
23     for(i = 1; i <= m; i++)
24     {
25         dis[i] = map[s][i];
26         visited[i] = i == s ? 1 : 0;
27     }
28     for(i = 1; i <= m - 1; i++)
29     {
30         mid = 0;
31         dis[mid] = maxint;
32         for(j = 1; j <= m; j++)
33             if(!visited[j] && dis[j] < dis[mid])
34                 mid = j;
35         visited[mid] = 1;
36         for(j = 1; j <= m; j++)
37             if(map[mid][j] < maxint && !visited[j] && map[mid][j] + dis[mid] < dis[j])
38                 dis[j] = map[mid][j] + dis[mid];
39     }
40 }
41 int main()
42 {
43     int i, j, a, b, c;
44     char s1[40], s2[40], start[40], end[40];
45     scanf("%d", &n);
46     while(n != -1)
47     {
48         m = 0;
49         for(i = 1; i <= 140; ++i){
50             for(j = 1; j <= 140; j++)
51                 map[i][j] = maxint;
52         }
53         scanf("%s %s", start, end);
54         for(i = 1; i <= n; i++)
55         {
56             scanf("%s %s %d", s1, s2, &c);
57             a = find(s1);
58             b = find(s2);
59             if(map[a][b] > c)
60             {
61                 map[a][b] = c;
62                 map[b][a] = c;
63             }
64         }
65         s = find(start);
66         e = find(end);
67         if(s == e)
68             printf("0\n");
69         else{
70             dijkstra(s, e);
71             if(dis[e] != maxint)
72                 printf("%ld\n", dis[e]);
73             else
74                 printf("-1\n");
75         }
76     scanf("%d", &n);
77     }
78     return 0;
79 }

 但是我原先自己写的俩个算法怎么也过不了,我不知道是什么原因:要找出来。。。

 1 #include<stdio.h>
 2 #include<string.h>
 3 #define Max 0xfffffff
 4 int map[160][160],mark[160];
 5 int n,m,s,e;
 6 long f[160];
 7 char name[160][32];
 8 int find(char str[30])
 9 {
10     int i;
11     for(i=1;i<=m;i++)
12     {
13         if(strcmp(name[i],str)==0)
14             return i;
15     }
16     if(m==0||i>m)
17     {
18         ++m;
19       strcpy(name[m],str); 
20      
21       return m;
22     }
23 }
24 int min(int x,int y)
25 {
26     return x>y?y:x;
27 }
28 void getmap()
29 {
30     int a,b,i,j,l;
31     char s1[40],s2[40];
32     for(i=0;i<=140;i++)
33         for(j=0;j<=140;j++)
34             map[i][j]=(i==j?0:Max);
35         for(i=0;i<n;i++)
36         {
37             scanf("%s%s%d",&s1,&s2,&l);
38               a=find(s1);
39               b=find(s2);
40             map[a-1][b-1]=map[b-1][a-1]=min(map[a-1][b-1],l);
41         }
42 }
43 void dijkstra()
44 {
45     int i,j,k,min;
46     memset(mark,0,sizeof(mark));
47     for(i=0;i<n;i++)
48         f[i]=map[s][i];
49     f[s]=0;
50     for(i=0;i<n;i++)
51     {
52         min=Max;
53         for(j=0;j<n;j++)
54         {
55             if(!mark[j]&&min>f[j])
56             {
57                 k=j;
58                 min=f[j];
59             }
60         }
61         if(min==Max)break;
62         mark[k]=1;
63         for(j=0;j<n;j++)
64             if(!mark[j]&&f[j]>f[k]+map[k][j])
65               f[j]=map[k][j]+f[k];
66     }
67     if(f[e]!=Max) printf("%ld\n",f[e]);
68     else printf("-1\n");
69 }
70 
71  int main()
72 {
73      while(~scanf("%d",&n)&&n>0)
74      {
75          if(n==-1)
76             break;
77         char start[40],end[40];
78         scanf("%s%s",start,end);
79          s=find(start)-1;
80          e=find(end)-1;
81          getmap();
82          if(s==e)
83              printf("0\n");
84          else
85            dijkstra();
86         
87     }
88     return 0;
89 }
 1 #include<stdio.h>
 2 #include<string.h>
 3 #define Max 0xfffffff
 4 int n,m,s,e,map[160][160];
 5 char name[160][32];
 6 int find(char str[30])
 7 {
 8     int i;
 9     for(i=1;i<=m;i++)
10     {
11         if(strcmp(name[i],str)==0)
12             return i;
13     }
14     if(m==0||i>m)
15     {
16         ++m;
17       strcpy(name[m],str); 
18      
19       return m;
20     }
21 }
22 int min(int x,int y)
23 {
24     return x>y?y:x;
25 }
26 void getmap()
27 {
28     int a,b,i,j,l;
29     char s1[40],s2[40];
30     for(i=0;i<n;i++)
31         for(j=0;j<n;j++)
32             map[i][j]=(i==j?0:Max);
33         for(i=0;i<n;i++)
34         {
35             scanf("%s%s%d",&s1,&s2,&l);
36               a=find(s1);
37               b=find(s2);
38             map[a-1][b-1]=map[b-1][a-1]=min(map[a-1][b-1],l);
39         }
40 }
41 void floyd(int s,int e)
42 {
43     int i,j,k;
44     for(k=0;k<n;k++)
45         for(i=0;i<n;i++)
46             for(j=0;j<n;j++)
47                 map[i][j]=min(map[i][j],map[i][k]+map[k][j]);
48              printf("%d\n",map[s][e]<Max?map[s][e]:-1);
49             
50 }
51 int main()
52 {
53      while(~scanf("%d",&n)&&n>0)
54      {
55          if(n==-1)
56             break;
57         char start[40],end[40];
58         scanf("%s%s",start,end);
59          s=find(start)-1;
60          e=find(end)-1;
61          getmap();
62         floyd(s,e);
63         
64     }
65     return 0;
66 }

 再次重新做这个题目写的代码ac:

 

#include<stdio.h>
#include<string.h>
#define INF 0xfffffff
int m,map[2600][2600],mark[2600];
int n,s,e;
long f[2600];
char name[2600][32];
int find(char str[32])
{int i;for(i=0;i<m;i++){if(strcmp(str,name[i])==0)return i;}if(m==0||i==m){strcpy(name[i],str);m++;return i;}
}
void dijkstra(){int i,j,k,min;memset(mark,0,sizeof(mark));for(i=0;i<n;i++)f[i]=map[s][i];f[s]=0;for(i=0;i<m;i++){min=INF;for(j=0;j<m;j++){if(!mark[j]&&min>f[j]){k=j;min=f[j];}}if(min==INF)break;mark[k]=1;for(j=0;j<n;j++)if(!mark[j]&&f[j]>f[k]+map[k][j])f[j]=map[k][j]+f[k];}if(f[e]!=INF) printf("%ld\n",f[e]);else printf("-1\n");}int main(){int i,j,x,y,time;while(~scanf("%d",&n)&&n!=-1){    m=0;char start[50],end[50],from[50],to[50];scanf("%s%s",start,end);s=find(start);e=find(end);for(i=0;i<160;i++)for(j=0;j<160;j++)if(i==j)map[i][j]=map[j][i]=0;elsemap[i][j]=map[j][i]=INF;for(i=0;i<n;i++){scanf("%s%s%d",from,to,&time);x=find(from);y=find(to);map[x][y]=map[y][x]=time;}if(s==e)printf("0\n");elsedijkstra();}return 0;}

 

转载于:https://www.cnblogs.com/cancangood/p/3357760.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/376364.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AndEngine引擎之SmoothCamera 平滑摄像机

SmoothCamera:就相当于现实世界的摄像机&#xff0c;要想照到一个物体&#xff0c;要么是摄像机移动&#xff0c;要么是物体移动到摄像头的范围内&#xff0c;想要放大或缩小一个物体&#xff0c;要么是物体向前或向后移动&#xff0c;要么是摄像头变焦 这里讨论的就是摄像头的…

160 - 44 defiler.1.exe

环境&#xff1a; Windows xp sp3 工具&#xff1a; 1.ollydbg 2.exeinfope 0x00 查壳 无壳就下一步 0x01 分析 随便输入个错的&#xff0c;出现了不知道哪国的语言。有个6&#xff0c;应该就是name的长度要大于6吧 OD载入&#xff0c;搜字符串。 00421BD7 |. 807D…

时间与日期处理

主要有以下类&#xff1a; NSDate -- 表示一个绝对的时间点NSTimeZone -- 时区信息NSLocale -- 本地化信息NSDateComponents -- 一个封装了具体年月日、时秒分、周、季度等的类NSCalendar -- 日历类&#xff0c;它提供了大部分的日期计算接口&#xff0c;并且允许您在NSDate和N…

C++ new/new operator、operator new、placement new初识

简要释义 1.operator new是内存分配函数&#xff08;同malloc&#xff09;&#xff0c;C&#xff0b;&#xff0b;在全局作用域(global scope)内提供了3份默认的operator new实现&#xff0c;并且用户可以重载operator new。 1 void* operator new(std::size_t) throw(std::bad…

160 - 45 Dope2112.2

环境&#xff1a; Windows xp sp3 工具 1.ollydbg 2.exeinfope 0x00 查壳 还是无壳的Delphi程序 0x01 分析 这次继续OD载入搜字符串&#xff0c;但是没找到错误信息的字符串。 又因为是Delphi程序&#xff0c;所以可以试一下这样&#xff1a; OD载入后还是搜字符串&…

编辑技巧 word

怎样给word中的文档加上水印 转载于:https://www.cnblogs.com/dqxu/p/4208372.html

NAT地址转换原理全攻略

NAT转换方式及原理 在NAT的应用中&#xff0c;可以仅需要转换内部地址&#xff08;就是“内部本地址”转换成“内部全局地址”&#xff09;&#xff0c;这是最典型的应用&#xff0c;如内部网络用户通过NAT转换共享上网&#xff1b;也可以是仅需要转换外部地址&#xff08;就是…

通过setTimeout来取消因大量计算造成的网页卡顿

js是单线程的&#xff0c;所以有些大量计算的操作会占用线程资源&#xff0c;导致页面卡住。 今天遇到这样一个场景&#xff0c;选择一个下拉框之后&#xff0c;对数据进行筛选&#xff0c;这个过程中有大量计算&#xff0c;点了selecte的option之后&#xff0c;option不隐藏&a…

160 - 47 DueList.2

环境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查壳 无壳的程序 0x01 分析 运行后说需要keyfile&#xff0c;那就创建一个。 OD载入找找看需要的keyfile叫什么名字 00401000 > $ 6A 00 push 0x0 …

如何解决Visual Studio2012 与此版本的Windows不兼容

解决方案&#xff1a; http://www.microsoft.com/zh-CN/download/details.aspx?id36020 下载更新转载于:https://www.cnblogs.com/awodefeng/p/3373343.html

160 - 48 DueList.3

环境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查壳 无壳的程序 0x01 分析 应该就是选上某个或多个框后点Check就能成功的&#xff0c;那应该就是不同框对应不同的值咯。旁边还有个提示&#xff1a;建议使用资源编辑器。 直接OD载入&#x…

为什么django+mongo在windows上session能够获取到,同样的程序在linux上就会报session的变量错误,keyerror?...

settings&#xff1a;SESSION_ENGINE django.contrib.sessions.backends.cache 其它地方&#xff1a;正常存取值。request.session["mm"]“MM” 转载于:https://www.cnblogs.com/angelfeeling/p/4211261.html

图片上传 关于压缩的问题

图片上传 关于压缩的问题 如果不压缩&#xff0c;图片的数据量非常大&#xff0c;很影响上传速度 http://blog.csdn.net/jinglijun/article/details/8751269 http://blog.csdn.net/jinglijun/article/details/8751220转载于:https://www.cnblogs.com/kevingod/p/3375507.html

160 - 49 DueList.4

环境&#xff1a; Windows xp sp3 工具&#xff1a; ollydbg exeinfope 0x00 查壳 无壳的程序 0x01 分析 运行后随便输入点东西&#xff0c; OD载入&#xff1a; 00401127 > /6A 00 push 0x0 ; /lParam 0 00401129 …

java中的codereview

&#xfeff;&#xfeff;关于codereview&#xff0c;在平时的开发中&#xff0c;经常忽略的环节&#xff0c;参照目前介绍写好代码的几本书和之前掉进的坑&#xff0c;做了一个总结&#xff0c;分享出来。 为什么要做 通过review规避一些代码层面的问题提升可读性&#xff0c;…

linux下开机启动脚本的方法

1.准备好要随机启动的程序&#xff0c;例如 /root/test.sh 。确保其可执行。 2.在目录 /etc/init.d/ 下编写控制脚本 test 。 #!/bin/sh ### BEGIN INIT INFO # Provides: test # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: …

理解i-node

原文链接:http://www.ruanyifeng.com/blog/2011/12/inode.html 感觉讲得挺好,便做个记录.转载于:https://www.cnblogs.com/malware/p/3377616.html

MD5算法详解

0x00 前言 MD5是一种哈希算法&#xff0c;用来保证信息的完整性。 就一段信息对应一个哈希值&#xff0c;且不能通过哈希值推出这段信息&#xff0c;而且还需要保证不存在任意两段不相同的信息对应同一个哈希值。不过MD5算法算出来的值也就16个字节&#xff08;16*8128&#x…

我的2015年读书计划,每两周读完一本书!

近日看到一篇文章&#xff0c;说Facebook CEO 马克扎克伯格给自己的2015年定下了一个新的挑战&#xff0c;每两周就要读完一本书&#xff08;传送门&#xff1a;戳这里&#xff09;。想了一下&#xff0c;我自己也很久没看书了&#xff0c;所以今年要改变一下&#xff0c;给自己…

书到用时方恨少

以前觉得的自己的英语还行&#xff0c;四级&#xff0c;六级的什么早就在读书的时候过了&#xff0c; 工作以后&#xff0c;陆陆续续也一直用着英语。 最近发现和老外私下聊天的时候&#xff0c;词汇量严重不足。不明白老外在说什么&#xff0c;一起跟着傻笑。 活到老&#xff…