其他分享
首页 > 其他分享> > 洛谷 P1135 奇怪的电梯

洛谷 P1135 奇怪的电梯

作者:互联网

题目链接 https://www.luogu.com.cn/problem/P1135

这题可以用bfs和dfs两种方法,这里先说一下bfs。


 

在本题中,相邻状态为当前所在楼层通过按向上或向下按钮所能到达的楼层,每个状态要记录的信息包括楼层编号和按按钮的次数。

先判断是否到达终点,是则返回x.step(到达此楼层一共需要按钮的次数),再判断下一个到达的楼层是否越界或是否已经被标记过。


 

放AC代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,a,b,ans=0;
 4 int k[210];
 5 int vis[210];//标记数组
 6 struct node
 7 {
 8     int id;//表示楼层号
 9     int step;//表示按钮次数
10 }x;
11 int bfs(int a)
12 {
13     vis[a]=1;
14     queue<node>q;
15     q.push((node){a,0});//起始点入队 
16     while(!q.empty())
17     {
18         x=q.front();
19         q.pop();
20         if(x.id==b) return x.step;
21         if(x.id+k[x.id]<=n&&!vis[x.id+k[x.id]])
22         {
23             q.push((node){x.id+k[x.id],x.step+1});
24             vis[x.id+k[x.id]]=1;
25         }
26         if(x.id-k[x.id]>=1&&!vis[x.id-k[x.id]])
27         {
28             q.push((node){x.id-k[x.id],x.step+1});
29             vis[x.id-k[x.id]]=1;
30         }a
31     }
32     return -1;
33 }
34 int main()
35 {
36     ios::sync_with_stdio(false);
37     cin>>n>>a>>b;
38     for(int i=1;i<=n;i++)
39         cin>>k[i];
40     cout<<bfs(a);
41     return 0;
42 }

 

标签:洛谷,int,step,vis,电梯,楼层,按钮,id,P1135
来源: https://www.cnblogs.com/marswithme/p/16075043.html