1 solutions
-
0
C++ :
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; int n,a,b,t; int ans=0x7f; int edge[205][205]; int f[209][209]; int main() { cin>>n>>a>>b; memset(edge,0x7f/2,sizeof(edge)); memset(f,0x7f/2,sizeof(f)); for (int i=1; i<=n; i=i+1) { f[i][i]=0; cin>>t; if (i+t<=n) { edge[i][i+t]=1; f[i][i+t]=edge[i][i+t]; } if (i-t>=1) { edge[i][i-t]=1; f[i][i-t]=edge[i][i-t]; } } for (int k=1; k<=n; k++) for (int i=1; i<=n; i++) if (i!=k) for (int j=1; j<=n; j=j+1) if (i!=j&&j!=k) { f[i][j]=min(f[i][j],f[i][k]+f[k][j]); } if (f[a][b]!=f[0][0]) cout<<f[a][b]<<endl; else cout<<-1<<endl; }
Pascal :
program gallane_Lift; var n,i,j,l,a,b,p:longint; lift,step:array[0..200] of longint; begin read(n,a,b); for i:=1 to n do read(lift[i]); for i:=1 to n do step[i]:=-1; step[a]:=0; p:=0; l:=1; while (l>0) and (step[b]=-1) do begin l:=0; for i:=1 to n do if step[i]=p then begin j:=i-lift[i]; if (j>0) and (step[j]=-1) then begin step[j]:=p+1; l:=l+1; end; j:=i+lift[i]; if (j<=n) and (step[j]=-1) then begin step[j]:=p+1; l:=l+1; end; end; p:=p+1; end; write(step[b]); end.
- 1
Information
- ID
- 552
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By