#C08L10P02. C08.L10.宽度优先搜索BFS.程序填空.奇怪的电梯
C08.L10.宽度优先搜索BFS.程序填空.奇怪的电梯
题目描述
有一天桐桐做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i 层楼(1 ≤ i ≤ N)上有一个数字 ;(0 ≤ ≤ N)。
电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5 代表了 ( = 3, = 3,...),从一楼开始。在一楼,按“上”可以到 4 楼,按“下”是不起作用的,因为没有 -2 楼。那么,从 A 楼到 B 楼至少要按几次按钮呢?
输入格式
第 1 行为三个正整数,表示 N,A,B(1 ≤ N ≤ 200,1 ≤ A,B ≤ N);
第 2 行为 N 个正整数,表示 。
输出格式
1 个整数,即最少按键次数,若无法到达,则输出 -1。
样例
5 1 5
3 3 1 2 5
3
程序填空
#include<bits/stdc++.h>
using namespace std;
struct node
{
int floor,ans;
};
queue <node> q;
int k[201],n,a,b;
bool flag[201],Found;
void bfs()
{
node t,NEW;
while(!q.empty())
{
t = 填空(1) ;
填空(2) ;
if(t.floor+k[t.floor]<=n&&!flag[t.floor+k[t.floor]])
{
NEW.floor = t.floor+k[t.floor];
NEW.ans = t.ans + 1;
if(NEW.floor==b)
{
cout<<NEW.ans;
Found = true;
return;
}
q.push(NEW);
flag[t.floor+k[t.floor]] = true;
}
if(填空(3)>=1&&!填空(4))
{
NEW.floor = 填空(5);
NEW.ans = 填空(6);
if(NEW.floor==b)
{
cout<<NEW.ans;
填空(7);
return;
}
填空(8);
flag[ 填空(9) ] = true;
}
}
}
int main()
{
cin>>n>>a>>b;
if(a==b)
{
cout<<0;
return 0;
}
for(int i=1;i<=n;i++)
cin>>k[i];
node t;
t.floor=a;
t.ans=0;
flag[a] = true;
q.push(t);
bfs();
if(填空(10))
cout<<"-1";
return 0;
}
填空(1):{{ input(1) }}
填空(2):{{ input(2) }}
填空(3):{{ input(3) }}
填空(4):{{ input(4) }}
填空(5):{{ input(5) }}
填空(6):{{ input(6) }}
填空(7):{{ input(7) }}
填空(8):{{ input(8) }}
填空(9):{{ input(9) }}
填空(10):{{ input(10) }}
相关
在以下作业中: