2 条题解

  • 0
    @ 2026-2-10 8:45:46
    #include<bits/stdc++.h>
    using namespace std;
    int dx[4]={0,-1,0,1};
    int dy[4]={-1,0,1,0};
    struct node{int x,y;}b[1100];//b数组用于记录路径
    int n,m,a[30][30],stx,sty,edx,edy;
    bool bk;
    void dfs(int x,int y,int k)
    {
        if(x==edx && y==edy)
        {
            for(int i=1;i<k;i++) printf("(%d,%d)->",b[i].x,b[i].y);
            printf("(%d,%d)\n",b[k].x,b[k].y);
            bk=1;
            return ;
        }
        for(int i=0;i<=3;i++)
        {
            int xx=x+dx[i],yy=y+dy[i];
    		if(a[xx][yy])
            {
                a[xx][yy]=0;
                b[k+1].x=xx;b[k+1].y=yy;
                dfs(xx,yy,k+1);
                a[xx][yy]=1;
            }
        }
    }
    int main()
    {
        scanf("%d%d",&n,&m);
        memset(a,0,sizeof(a));
        for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);
        
        scanf("%d%d%d%d",&stx,&sty,&edx,&edy);
        if(a[stx][sty]==0 || a[edx][edy]==0) { printf("-1\n"); return 0;} 
        
        a[stx][sty]=0;
        b[1].x=stx;b[1].y=sty;
        
        bk=false;dfs(stx,sty,1);
        
        if(!bk)printf("-1\n");
        return 0;
    }
    
    
    • 0
      @ 2025-10-8 16:48:28
      #include<bits/stdc++.h>
      using namespace std;
      int dx[4]={0,-1,0,1};
      int dy[4]={-1,0,1,0};
      struct node{int x,y;}b[1100];//b数组用于记录路径
      int n,m,a[30][30],stx,sty,edx,edy;
      bool bk;
      void dfs(int x,int y,int k)
      {
          if(x==edx && y==edy)
          {
              for(int i=1;i<k;i++) printf("(%d,%d)->",b[i].x,b[i].y);
              printf("(%d,%d)\n",b[k].x,b[k].y);
              bk=1;
              return ;
          }
          for(int i=0;i<=3;i++)
          {
              int xx=x+dx[i],yy=y+dy[i];
      		if(a[xx][yy])
              {
                  a[xx][yy]=0;
                  b[k+1].x=xx;b[k+1].y=yy;
                  dfs(xx,yy,k+1);
                  a[xx][yy]=1;
              }
          }
      }
      int main()
      {
          scanf("%d%d",&n,&m);
          memset(a,0,sizeof(a));
          for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) scanf("%d",&a[i][j]);
          
          scanf("%d%d%d%d",&stx,&sty,&edx,&edy);
          if(a[stx][sty]==0 || a[edx][edy]==0) { printf("-1\n"); return 0;} 
          
          a[stx][sty]=0;
          b[1].x=stx;b[1].y=sty;
          
          bk=false;dfs(stx,sty,1);
          
          if(!bk)printf("-1\n");
          return 0;
      }
      
      • 1

      信息

      ID
      78
      时间
      1000ms
      内存
      128MiB
      难度
      7
      标签
      递交数
      280
      已通过
      73
      上传者