【HDU 1548】【BFS】A strange lift

1186 ワード

実はポイントは、入力の順番は各階で押すしかないので、順番ではないので、最初はいつも間違っていたと思っていました.
理屈を言えば最短でもいいから、お任せします. 
#include "iostream"
#include "algorithm"
#include "queue"
using namespace std;
int a,b,n;
int vis[205],lift[205];
bool check(int x)
{
	if(x>=0 && x<=n && vis[x]==0)
		return true;
	return false;
}
int main(int argc, char const *argv[])
{
	while(~scanf("%d",&n),n)
	{
		queue<int> q;
		memset(vis,0,sizeof(vis));
		memset(lift,0,sizeof(lift));
		scanf("%d %d",&a,&b);
		for (int i = 1; i <= n; ++i)
			scanf("%d",&lift[i]);
		int flag=1;
		q.push(a);
		vis[a]=1;
		while(!q.empty())
		{
			int t1=q.front();
			q.pop();
			if(t1==b)
			{
				flag=1;
				break;
			}
			int t2=t1+lift[t1];
			//printf("%d
",t2); if(check(t2)) { vis[t2]=vis[t1]+1; q.push(t2); //printf("1
"); } t2=t1-lift[t1]; //printf("%d
",t2); if(check(t2)) { vis[t2]=vis[t1]+1; q.push(t2); //printf("2
"); } } flag?printf("%d
",vis[b]-1):printf("-1
"); } return 0; }