关闭

【Hdu】1548 A strange lift

234人阅读 评论(0) 收藏 举报
分类:
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;

const int N=201;

struct G
{
	int v,nxt;
}map[N<<1];
int tt,hd[N];
int n,s,t,k[N];
int q[N],qh,qt,v[N],d[N];

inline int read(void)
{
	int x=0,f=1; char c=getchar();
	for (;c<'0'||c>'9';c=getchar()) if (c=='-') f=-1;
	for (;'0'<=c&&c<='9';c=getchar()) x=(x<<1)+(x<<3)+c-'0';
	return x*f;
}

inline int check(int i)
{
	return 1<=i&&i<=n;
}

inline void ins(int u,int v)
{
	map[++tt].v=v;
	map[tt].nxt=hd[u];
	hd[u]=tt;
}

int main(void)
{	
	for (int cc=1;cc;cc++)
	{
		memset(hd,0,sizeof hd); tt=0;
		qh=0,qt=1; memset(v,0,sizeof v);
		memset(d,0,sizeof d);
		
		n=read();
		if (!n) break;
		s=read(),t=read();
		for (int i=1;i<=n;i++) k[i]=read();
	
		for (int i=1;i<=n;i++)
		{
			if (check(i-k[i])) ins(i,i-k[i]);
			if (check(i+k[i])) ins(i,i+k[i]);
		}
	
		if (s==t)
		{
			printf("0\n");
			continue;
		}
	
		int k;
		v[s]=1,q[qt=1]=s,d[t]=-1;
		for (;qh^qt;)
		{
			k=q[++qh];
			for (int r=hd[k];r;r=map[r].nxt)
				if (!v[map[r].v])
				{
					d[map[r].v]=d[k]+1;
					q[++qt]=map[r].v;
					v[map[r].v]=1;
				}
		}
		printf("%d\n",d[t]);
	}
	
	return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:49859次
    • 积分:1862
    • 等级:
    • 排名:千里之外
    • 原创:137篇
    • 转载:0篇
    • 译文:0篇
    • 评论:3条
    最新评论