3 条题解

  • 4
    @ 2022-10-26 18:37:45
    #include<bits/stdc++.h>
    using namespace std;
    int n,dx[]={-1,0,0,1},dy[]={0,-1,1,0};
    bool a[105][105];
    struct Point{
        int x,y;
    };
    queue<Point> q;
    bool check(int x,int y){ // 判断该点坐标是否可以访问
        return x>=1&&y>=1&&x<=n&&y<=n&&!a[x][y];
    }
    void bfs(){
        int xx,yy;
        cin>>xx>>yy;
        if(a[xx][yy]){ // 起始点无法通行
            cout<<"NO";
            return;
        }
        q.push((Point){xx,yy});
        cin>>xx>>yy;
        if(a[xx][yy]){ // 终点无法通行
            cout<<"NO";
            return;
        }
        while(q.size()){
            Point now=q.front(); // 获取队首元素
            q.pop(); // 出队
            for(int i=0;i<4;i++){
                int nx=now.x+dx[i],ny=now.y+dy[i];
                if(check(nx,ny)){ // 访问点
                    if(nx==xx&&ny==yy){ // 到达终点
                        cout<<"YES";
                        return; // 结束函数
                    }
                    a[nx][ny]=1;
                    q.push((Point){nx,ny}); // 以结构体类型入队
                }
            }
        }
        cout<<"NO"; // 访问完所有点后无法到达终点则失败
    }
    int main(){
        ios::sync_with_stdio(false); // 输入输出加速
        cin.tie(0);
        cout.tie(0);
        cin>>n;
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                cin>>a[i][j]; // 循环读入每个点
        bfs(); // 使用 广度优先搜索算法
        return 0; // 结束函数
    }
    
    • -2
      @ 2023-7-16 15:37:16

      来吧各位,上鸡汤!

      #include<bits/stdc++.h>
      using namespace std;
      int n,dx[]={-1,0,0,1},dy[]={0,-1,1,0};
      bool a[105][105];
      struct Point{
          int x,y;
      };
      queue<Point> q;
      bool check(int x,int y)
      { 
          return x>=1&&y>=1&&x<=n&&y<=n&&!a[x][y];
      }
      void bfs(){
          int xx,yy;
          cin >> xx >> yy;
          if(a[xx][yy])
      { 
              cout << "NO";
              return;
          }
          q.push((Point){xx,yy});
          cin>>xx>>yy;
          if(a[xx][yy])
         { 
              cout<<"NO";
              return;
          }
          while(q.size())
          {
              Point now=q.front();
              q.pop(); 
              for(int i=0;i<4;i++)
                {
                  int nx=now.x+dx[i],ny=now.y+dy[i];
                  if(check(nx,ny)
                     { 
                      if(nx==xx&&ny==yy){ // 到达终点
                          cout<<"YES";
                          return; // 结束函数
                      }
                      a[nx][ny]=1;
                      q.push((Point){nx,ny}); 
                  }
              }
          }
          cout << "NO"; 
      }
      int main(){
          ios::sync_with_stdio(false); 
          cin.tie(0);
          cout.tie(0);
          cin>>n;
          for(int i=1;i<=n;i++)
              for(int j=1;j<=n;j++)
                  cin >> a[i][j]; 
          bfs(); 
          return 0; 
      }
      
      • -7
        @ 2022-4-24 17:48:42

        写题解请注意

        鼓励大家写题解,但注意题解格式。

        题解一定要有思路解析或代码注释,能否让别人理解你的思路

        也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

        给代码两端加上这个会舒服一些

        ```cpp

        你的代码

        ```

        </span>

        这个点在键盘的左上角tab上面那个键,注意切换输入法

        #include<iostream>
        using namespace std;
        int main()
        {
            int n;
            cin>>n;//这是一个注释
            return 0;
        } 
        

        请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

        抄袭题解一经发现直接取消成绩。

        题解被删除的可能

        1. 代码不符合格式规范
        2. 没有思路讲解或者没有注释,
        3. 无意义的题解

        大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

        • 1

        信息

        ID
        427
        时间
        1000ms
        内存
        128MiB
        难度
        5
        标签
        递交数
        211
        已通过
        78
        上传者