1 solutions

  • 0
    @ 2024-12-10 22:28:05

    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