hdu1548

来源:互联网 发布:域名做企业邮箱 编辑:程序博客网 时间:2024/05/18 11:05
/*
分析:
    第一次写最短路,1WA,考虑到a==b的情况了,但第一次错
误的输出了a,- -III,我的1A啊……


                                              2012-05-26
*/








#include"stdio.h"#include"string.h"struct A{int ans;int flag;int pre;}E[222];int min(int a,int b){return a>b?b:a;}int main(){int n;int a,b;int i,l;int temp;int k;int map[202][202];while(scanf("%d",&n),n){scanf("%d%d",&a,&b);for(i=1;i<=n;i++)for(l=1;l<=n;l++)map[i][l]=0;for(i=1;i<=n;i++){scanf("%d",&temp);if(i+temp<=n)map[i][i+temp]=1;if(i-temp>=1)map[i][i-temp]=1;}if(a==b){printf("0\n");continue;}for(i=1;i<=n;i++){E[i].ans=11111111;E[i].pre=i;E[i].flag=1;}k=a;E[k].ans=0;while(k){E[k].flag=0;for(l=1;l<=n;l++){if(map[k][l]==0)continue;if(E[k].ans+map[k][l]<E[l].ans){E[l].ans=E[k].ans+map[k][l];E[l].pre=k;}}k=0;for(l=1;l<=n;l++)if(E[l].flag){k=l;break;}for(l++;l<=n;l++)if(E[l].flag&&E[l].ans<E[k].ans)k=l;if(E[k].ans==11111111)break;}if(E[b].pre==b)printf("-1\n");elseprintf("%d\n",E[b].ans);}return 0;}


原创粉丝点击