bfs例题 strange lift 结果老是-1,不知道怎么错的。。。求高手解答(我是菜鸟,老被虐)
//strange lift
#include<iostream>
#include<queue>
using namespace std;
struct node
{ int floor;
int time;
};
#define MAX 100
int flag[MAX];
int regular[MAX];
int BFS()
{
queue<node>Q;//lz establish a queue
node p,q;
int n,i,start,end;
cin>>n>>start>>end;
p.floor=start;
flag[start]=1;
for(i=1;i<=n;i++)
cin>>regular[i];//record the moving regular of each floor
p.time=0;//initialize the time
Q.push(p);
while(!Q.empty())
{
p=Q.front;
Q.pop();
q=p;
if(p.floor==end)
return p.time;
q.floor+=regular[q.floor];
if(q.floor<=n&&flag[q.floor]==0)
{
q.time++;
flag[q.floor]=1;
Q.push(q);
}
q=p;
q.floor-=regular[q.floor];
if(q.floor>=1&&flag[q.floor]==0)
{
q.time++;
flag[q.floor]=1;
Q.push(q);
}
}
}
void main()
{
memset(flag,0,sizeof(flag));
cout<<BFS()<<endl;
}