hdu 1548 A strange lift 解题报告

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1548

题目意思:给出 n 个 floor 你,每个floor 有一个数k,按下它可以到达 floor + k 或者 floor - k的位置。问从floor A 到 floor  B 最少的按lift 次数是多少。

         hdu 真是!!!!! 

        queue<node>  q 写在main 外就 wa了!!! = = 汗!!! 

         还专门瞪大双眼对照别人AC的代码,看了一遍又一遍,以为色盲了= =,可恶HDU !!!

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <queue>
 6 using namespace std;
 7 
 8 const int maxn = 200 + 10;
 9 int vis[maxn], k[maxn];
10 
11 struct node
12 {
13     int f, step;
14 }st, s, next;
15 
16 int main()
17 {
18     int n, a, b;
19     while (scanf("%d", &n) != EOF)
20     {
21         if (n == 0)
22             break;
23         scanf("%d%d", &a, &b);
24         for (int i = 1; i <= n; i++)
25         {
26             scanf("%d", &k[i]);
27             vis[i] = 0;
28         }
29         int flag = 0;
30         queue<node> q;     // 这个东西在main外声明就wa!!!
31         st.f = a;
32         st.step = 0;
33         q.push(st);
34         vis[st.f] = 1;
35         while (!q.empty())
36         {
37             s = q.front();
38             q.pop();
39             if (s.f == b)
40             {
41                 flag = 1;
42                 break;
43             }
44             st.f = s.f + k[s.f];
45             next.f = s.f - k[s.f];
46             if (st.f >= 1 && st.f <= n && !vis[st.f])
47             {
48                 vis[st.f] = 1;
49                 st.step = s.step + 1;
50                 q.push(st);
51             }
52             if (next.f >= 1 && next.f <= n && !vis[next.f])
53             {
54                 vis[next.f] = 1;
55                 next.step = s.step + 1;
56                 q.push(next);
57             }
58         }
59         printf("%d\n", flag ? s.step : -1);
60     }
61     return 0;
62 }

 

转载于:https://www.cnblogs.com/windysai/p/3906065.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值