HDU 1548

 1 /*
 2         BFS(广度优先搜索)
 3         在本道题中用来寻找最短路径
 4
 5         在这里采用模板
 6
 7 */
 8 #include<cstdio>
 9 #include<cstring>
10 #include<queue>
11
12 #define maxn 202
13
14 using namespace std;
15
16 int N,k[maxn];
17
18 int BFS(int s,int v)//s起点 v终点
19 {
20         if(s==v) return 0;
21
22         bool jud[maxn];//判断是否遍历过
23         memset(jud,false,sizeof(jud));
24         int dis[maxn];//记录路径
25         memset(dis,0,sizeof(dis));
26         queue<int> Q;
27
28         Q.push(s);
29         jud[s]=true;
30         while(!Q.empty())
31         {
32                 int th=Q.front();
33                 Q.pop();
34                 if(th==v) break;//起点终点重合时,退出循环
35
36                 int next;
37                 for(int i=-1;i==-1||i==1;i+=2)//重点就在于这里的路径怎么写,本题是加减楼层
38                 {
39                         next=th+k[th]*i;//拓展节点
40                         if(next<=0||next>N) continue;//是否超出范围
41
42                         if(!jud[next])
43                         {
44                                 Q.push(next);
45                                 jud[next]=true;
46                                 dis[next]=dis[th]+1;
47                         }
48                 }
49
50         }
51         if(dis[v]==0) return -1;
52         else return dis[v];
53 }
54
55 bool Do()
56 {
57         int A,B;
58         if(scanf("%d%d%d",&N,&A,&B),N==0) return false;
59         for(int i=0;i<N;i++)
60         {
61                 scanf("%d",&k[i+1]);
62         }
63         printf("%d\n",BFS(A,B));
64         return true;
65 }
66
67 int main()
68 {
69         while(Do());
70         return 0;
71 }
时间: 2024-10-18 06:09:38

HDU 1548的相关文章

hdu 1548 (dijkstra解法)(一次AC就是爽)

恭喜福州大学杨楠获得[BestCoder Round #4]冠军(iPad Mini一部) <BestCoder用户手册>下载 A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 11670    Accepted Submission(s): 4430 Problem Description There is

HDU 1548 A strange lift(Dijkstra,简单BFS)

题目大意: 电梯有两个选项向上或向下,每层楼有一个参数ki,代表电梯可以再该楼层的基础上向上或向下移动ki层,限制条件是向上不能超过楼层总数n,向下不能少于一.输入总层数n和当前所在层数以及目标层数,然后是n个数分别代表第i层的移动范围.输出最少移动次数,若不可达,输出-1. 解题思路: 1.用Dijkstra算法,首先构建邻接矩阵,注意在构造时,要考虑i-k[i]<1和i+k[i]>n,i代表当前所在层. 1 #include<string.h> 2 #include<st

HDU 1548 (最基础的BFS了) A strange lift

这是一维的BFS,而且没有什么变形,应该是最基础的BFS了吧 题意: 有这样一个奇葩的电梯,你在第i层的时候你只能选择上或者下Ki层,也就是你只能从第i层到达i+Ki或者i-Ki层.当然电梯最低只能在1层最高只能在n层. 给出起点和终点问最少需要多少次才能到达终点,如果不能到达输出-1 没有什么好解释的了,如此单纯的一道题,只要不是太粗心就能A过去 1 //#define LOCAL 2 #include <iostream> 3 #include <cstdio> 4 #incl

hdu 1548 A strange lift (dijkstra算法)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548 题目大意:升降电梯,先给出n层楼,然后给出起始的位置,即使输出从A楼道B楼的最短时间. 注意的几点 (1)每次按一下,只能表示上或者是下,然后根据输入的看是上几层或者是下几层. (2)注意不能到底不存在的楼层. 详见代码. 1 #include <iostream> 2 #include <cstdio> 3 using namespace std; 4 const int IN

HDU 1548 A strange lift 搜索

A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11341    Accepted Submission(s): 4289 Problem Description There is a strange lift.The lift can stop can at every floor as you want

cogs 364. [HDU 1548] 奇怪的电梯 Dijkstra

364. [HDU 1548] 奇怪的电梯 ★   输入文件:lift.in   输出文件:lift.out   简单对比时间限制:1 s   内存限制:128 MB [问题描述] 呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯.大楼的每一层楼都可以停电梯,而且第 i 层楼 (1<=i<=N) 上有一个数字 Ki(0<=Ki<=N) .电梯只有四个按钮:开,关,上,下.上下的层数等于当前楼层上的那个数字.当然,如果不能满足要求,相应的按钮就会失灵.例如: 3 3 1 2 5 代表

Hdu 1548 A strange lift(BFS)

Problem地址:http://acm.hdu.edu.cn/showproblem.php?pid=1548 一道简单的bfs,适合新手.你现在所在的电梯层为一个节点,而你从这个节点可以拜访另外两个节点(电梯向上走为一个节点,电梯向下走有一个节点),而拜访的时候自然也要避免拜访重复,否则会陷入死循环. #include <iostream> #include <queue> using namespace std; const int maxn = 200+10; int N,

HDU 1548 A strange lift【不错的最短路,spfa】

A strange lift Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 21281    Accepted Submission(s): 7786 Problem Description There is a strange lift.The lift can stop can at every floor as you want

HDU 1548.A strange lift

A strange lift Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u SubmitStatusPracticeHDU 1548 Description There is a strange lift.The lift can stop can at every floor as you want, and there is a number Ki(0 <= Ki <= N)

hdu 1548 简单bfs。。。

由于题目过水.. 我就在这里把bfs的模板写一些吧.. bfs的思想是利用队列的特性 对树的每一层先遍历 每一次访问时取出队首 然后排出~ #include<queue>void bfs(int start){ int t;//保存队首的元素 queue<int>q;//定义一个名字叫q的队列 q.push(start);//树根入队  while(!q.empty())//当队列里面还有元素  即还没有搜索结束  {  t=q.front();  int next;  if()