题意 就是一个电梯只有上下两个按钮,每层有一个数字,告诉你可以上几层 或下几层;
广搜,注意用一个 数字 标记去过的楼层;以后不能再去;不过我不明白为什么不可以直接
标记呢 为什么还要 单独开一个数组;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int tot[2120];
bool tt[2110];
int N, A, B, flag;
struct node
{
int x;
int step;
};
void bfs()
{
memset(tt, 0, sizeof(tt));
queue<node>q;
node temp, type;
temp.x = A;
temp.step = 0;
q.push(temp);
//tot[A] = -1;
while(!q.empty())
{
temp = q.front();
q.pop();
if(temp.x == B)
{
flag = temp.step;
return ;
}
int a = 1, c = 2;
while(c--)
{
int fx = temp.x + a*tot[temp.x];
if(fx >= 1 && fx <= N && !tt[fx])
{
tt[fx] = 1;
type.x = fx;
type.step = temp.step + 1;
q.push(type);
}
a = -a;
}
}
return ;
}
int main()
{
while(scanf("%d", &N),N)
{
scanf("%d%d", &A, &B);
for(int i = 1; i <= N; i++)
{
scanf("%d", &tot[i]);
}
flag = -1;
bfs();
if(flag == -1)
printf("-1\n");
else
printf("%d\n", flag);
}
}