zoukankan      html  css  js  c++  java
  • HDU1548 A strange lift BFS 简单题

    一个电梯有n层,每一层有一个数k[i],和2个按钮,UP和DOWN,表示从这一层可以到达i+k[i] 或i-k[i] .

    给出a,b,问从a到b 最少需要按多少下按钮。

    直接bfs.

     1 #include<cstdio>
     2 #include<queue>
     3 #include<cstring>
     4 using namespace std;
     5 const int maxn=210;
     6 int n,a,b;
     7 int k[maxn];
     8 bool vis[maxn];
     9 int time[maxn];
    10 int bfs()
    11 {
    12     memset(vis,false,sizeof(vis));
    13     queue<int>que;
    14     while(!que.empty())
    15         que.pop();
    16     que.push(a);
    17     vis[a]=true;
    18     time[a]=0;
    19     while(!que.empty())
    20     {
    21         int u=que.front();
    22         que.pop();
    23         if(u==b)
    24             return time[b];
    25         if(u-k[u]>0&&!vis[u-k[u]])
    26         {
    27             que.push(u-k[u]);
    28             vis[u-k[u]]=true;
    29             time[u-k[u]]=time[u]+1;
    30         }
    31         if(u+k[u]<=n&&!vis[u+k[u]])
    32         {
    33             que.push(u+k[u]);
    34             vis[u+k[u]]=true;
    35             time[u+k[u]]=time[u]+1;
    36         }
    37     }
    38     return -1;
    39 }
    40 int main()
    41 {
    42     while(scanf("%d%d%d",&n,&a,&b))
    43     {
    44         if(!n)
    45             break;
    46         for(int i=1;i<=n;i++)
    47             scanf("%d",&k[i]);
    48         int ans=bfs();
    49         printf("%d
    ",ans);
    50     }
    51     return 0;
    52 }
    提交代码

     

  • 相关阅读:
    Python(93)_网络编程基础
    Web前端(13)_路径
    Web前端(12)_注释
    Web前端(11)_base标签
    Python(91)_python复习
    Web前端(10)_css文本样式
    Web前端(9)_div+span等标签
    虚拟化(6)_CPU虚拟化
    虚拟化(5)_打开tcp监听
    虚拟化(4)_离线克隆与在线克隆
  • 原文地址:https://www.cnblogs.com/-maybe/p/4394180.html
Copyright © 2011-2022 走看看