3 solutions

  • 2
    @ 2024-7-13 14:02:18
    #include<bits/stdc++.h>
    using namespace std;
    const int N=210;
    int dist[N];
    int dx[N];
    int dy[]={-1,1};
    int n,A,B;
    int bfs(int x)
    {
       memset(dist,0x3f,sizeof dist);
       dist[x]=0;
       queue<int> q;
       q.push(x);
       while(q.size())
       {
          int t=q.front();
          q.pop();
          if(t==B)
          {
             return dist[B];
          }
          for(int i=0;i<2;i++)
          {
             int a=t+dx[t]*dy[i];
             if(a<0||a>n)
             {
                continue;
             }
             if(dist[a]!=0x3f3f3f3f)
             {
                continue;
             }
             dist[a]=dist[t]+1;
             q.push(a);
          }
       }
       return -1;
    }
    int main()
    {
       cin>>n>>A>>B;
       for(int i=1;i<=n;i++)
       {
          cin>>dx[i];
       }
       cout<<bfs(A);
       return 0;
    }
    
    • 0
      @ 2025-1-18 16:17:31
      #include<bits/stdc++.h>
      using namespace std;
      const int N=210;
      int dist[N];
      int dx[N];
      int dy[N];
      int n,A,B;
      int bfs(int x)
      {
      	list<int> q;
      	q.push_back(x);
      	dist[q]=0;
      	while(dist.size())
      	{
      		int t=dy.front();
      		dy.pop();
      		if(q==A)
      		{
      			return dist[B];
      		}
      		for(int i=0;i<2;i++)
      		{
      			int a=t+dx[t]*dy[i];
      			if(a<0||a>n) break;
      			if(dist[a]!=0x3f3f3f) break;
      			dy[a]=dy[t]+1;
      			q.push(dx[i]);
      		}
      	}
      	return -1;
      }
      int main()
      {
      	cin>>n>>A>>B;
      	for(int i=1;i<=n;i++)
      	{
      		cin>>dy[i];
      	}
      	cout<<bfs(n);
          return 0;
      }
      
      • -1
        @ 2024-12-3 19:20:04
        #include<bits/stdc++.h>
        using namespace std;
        const int N=210;
        int dist[N];
        int dx[N];
        int dy[]={-1,1};
        int n,A,B;
        int bfs(int x)
        {
           memset(dist,0x3f,sizeof dist);
           dist[x]=0;
           queue<int> q;
           q.push(x);
           while(q.size())
           {
              int t=q.front();
              q.pop();
              if(t==B)
              {
                 return dist[B];
              }
              for(int i=0;i<2;i++)
              {
                 int a=t+dx[t]*dy[i];
                 if(a<0||a>n)
                 {
                    continue;
                 }
                 if(dist[a]!=0x3f3f3f3f)
                 {
                    continue;
                 }
                 dist[a]=dist[t]+1;
                 q.push(a);
              }
           }
           return -1;
        }
        int main()
        {
           cin>>n>>A>>B;
           for(int i=1;i<=n;i++)
           {
              cin>>dx[i];
           }
           cout<<bfs(A);
           return 0;
        }
        
        
        • 1

        Information

        ID
        221
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        3
        Tags
        # Submissions
        65
        Accepted
        13
        Uploaded By