标签:
1 # include<iostream> 2 # include<cstdio> 3 # include<queue> 4 # include<cstring> 5 # include<algorithm> 6 using namespace std; 7 struct node 8 { 9 int pos,time; 10 }; 11 int n,a,b; 12 int f[205]; 13 int mark[205]; 14 void BFS() 15 { 16 queue<node>q; 17 memset(mark,0,sizeof(mark)); 18 node now; 19 now.pos=a,now.time=0; 20 q.push(now); 21 mark[a]=1; 22 while(!q.empty()) 23 { 24 now=q.front(); 25 q.pop(); 26 if(now.pos==b){ 27 printf("%d\n",now.time); 28 return ; 29 } 30 node nxt; 31 nxt.pos=now.pos+f[now.pos]; 32 nxt.time=now.time+1; 33 if(nxt.pos<=n&&!mark[nxt.pos]){ 34 q.push(nxt); 35 mark[nxt.pos]=1; 36 } 37 nxt.pos=now.pos-f[now.pos]; 38 nxt.time=now.time+1; 39 if(nxt.pos>=1&&!mark[nxt.pos]){ 40 q.push(nxt); 41 mark[nxt.pos]=1; 42 } 43 } 44 printf("-1\n"); 45 } 46 int main() 47 { 48 while(scanf("%d",&n)&&n) 49 { 50 scanf("%d%d",&a,&b); 51 for(int i=1;i<=n;++i) 52 scanf("%d",&f[i]); 53 BFS(); 54 } 55 }
spfa:
1 # include<iostream> 2 # include<cstdio> 3 # include<queue> 4 # include<cstring> 5 # include<algorithm> 6 using namespace std; 7 const int INF=1<<29; 8 int mp[205][205]; 9 int f[205],a,b,n,dis[205]; 10 void init() 11 { 12 for(int i=1;i<=n;++i) 13 for(int j=1;j<=n;++j) 14 mp[i][j]=(i==j)?0:INF; 15 for(int i=1;i<=n;++i){ 16 if(i+f[i]<=n) 17 mp[i][i+f[i]]=1; 18 if(i-f[i]>=1) 19 mp[i][i-f[i]]=1; 20 } 21 } 22 void spfa() 23 { 24 init(); 25 fill(dis+1,dis+n+1,INF); 26 queue<int>q; 27 q.push(a); 28 dis[a]=0; 29 while(!q.empty()){ 30 int u=q.front(); 31 q.pop(); 32 for(int i=1;i<=n;++i){ 33 if(dis[i]>dis[u]+mp[u][i]){ 34 dis[i]=dis[u]+mp[u][i]; 35 q.push(i); 36 } 37 } 38 } 39 if(dis[b]==INF) 40 printf("-1\n"); 41 else 42 printf("%d\n",dis[b]); 43 } 44 int main() 45 { 46 while(scanf("%d",&n)&&n) 47 { 48 scanf("%d%d",&a,&b); 49 for(int i=1;i<=n;++i) 50 scanf("%d",f+i); 51 spfa(); 52 } 53 return 0; 54 }
标签:
原文地址:http://www.cnblogs.com/20143605--pcx/p/4678532.html