2 solutions

  • 1
    @ 2024-7-31 16:00:29
    #include<bits/stdc++.h>
    using namespace std;
    int dx[]={-1,1,0,0};
    int dy[]={0,0,-1,1};
    const int N=110;
    char g[N][N];
    int dist[N][N];
    struct Node{
        int x,y;
    };
    int n,sx,sy,ex,ey;
    bool check(int x,int y)
    {
        if(x<1||x>n||y<1||y>n)
        {
            return false;
        }
        if(g[x][y]=='x')
        {
            return false;
        }
        return true;
    }
    int bfs()
    {
        queue<Node> q;
        q.push({sx,sy});
        while(q.size()) 
        {
            Node t=q.front();
            q.pop();
            if(t.x==ex&&t.y==ey)
            {
                return dist[ex][ey];
            }
            for(int i=0;i<4;i++)
            {
                int a=t.x+dx[i];
                int b=t.y+dy[i];
                while(check(a,b))
                {
                    if(dist[a][b]>dist[t.x][t.y]+1)
                    {
                        dist[a][b]=dist[t.x][t.y]+1;
                        q.push({a,b});
                    } 
                    a+=dx[i];
                    b+=dy[i]; 
                }
            }
        }
    } 
    int main()
    {
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cin>>g[i][j];
                if(g[i][j]=='A')
                {
                    sx=i,sy=j;
                }
                else if(g[i][j]=='B')
                {
                    ex=i,ey=j;
                }
            }
        }
        memset(dist,0x3f,sizeof dist);
        dist[sx][sy]=0;
        bfs();
        if(dist[ex][ey]==0x3f3f3f3f)
        {
            cout<<-1;
        }
        else
        {
            cout<<dist[ex][ey]-1;
        }
        return 0;
    }
    
    • -1
      @ 2024-5-18 10:39:28
      #include<bits/stdc++.h>
      using namespace std;
      struct Node{
          int x,y;    
      };
      int n,sx,sy,ex,ey;
      const int N=110;
      char g[N][N];
      int dist[N][N];
      int dx[]={-1,1,0,0};
      int dy[]={0,0,-1,1};
      bool check(int x,int y) //判断出界和不能走 
      {
          if(x<1||x>n||y<1||y>n) return false;
          if(g[x][y]=='x') return false;
          return true;
      }
      int bfs()
      {
          queue<Node> q;
          q.push({sx,sy});
          while(q.size()) 
          {
              Node t=q.front();
              q.pop();
              if(t.x==ex&&t.y==ey)
              {
                  return dist[ex][ey];
              }
              for(int i=0;i<4;i++)
              {
                  int a=t.x+dx[i];
                  int b=t.y+dy[i];
                  while(check(a,b))
                  {
                      if(dist[a][b]>dist[t.x][t.y]+1)
                      {
                          dist[a][b]=dist[t.x][t.y]+1;
                          q.push({a,b});
                      } 
                      a+=dx[i];
                      b+=dy[i]; 
                  }
              }
          }
      } 
      int main()
      {
          cin>>n;
          for(int i=1;i<=n;i++)
          {
              for(int j=1;j<=n;j++)
              {
                  cin>>g[i][j];
                  if(g[i][j]=='A') sx=i,sy=j;
                  else if(g[i][j]=='B') ex=i,ey=j;
              }
          }
          memset(dist,0x3f,sizeof dist);
          dist[sx][sy]=0;
          bfs();
          if(dist[ex][ey]==0x3f3f3f3f) cout<<-1;
          else cout<<dist[ex][ey]-1;
          return 0;
      }
      
      • 1

      Information

      ID
      227
      Time
      1000ms
      Memory
      256MiB
      Difficulty
      5
      Tags
      # Submissions
      22
      Accepted
      6
      Uploaded By