1 条题解

  • 0
    @ 2025-2-14 21:30:05

    C++ :

    #include<cstdio>
    #include<queue>
    #include<cstring>
    using namespace std;
    int a[40][40];
    int f[40][40];
    int m,n,m1,m2;
    queue<int> q;
    queue<int> p;
    int si,sj,ei,ej;
    int b[8],d[8];
    int main()
    {
      memset(f,0x7f,sizeof(f));
      scanf("%d%d%d%d",&m,&n,&m1,&m2);
      for(int i=1;i<=m;i++) 
      for(int j=1;j<=n;j++)
     {
     	scanf("%d",&a[i][j]);
       if(a[i][j]==3)
       {
      		si=i;
      		sj=j;
       }
       if(a[i][j]==4)
      {
      	    ei=i;
      		ej=j;
      }
    }
      b[1]=m1;b[2]=m1;b[3]=m2;b[4]=m2;b[5]=-m1;b[6]=-m1;b[7]=-m2;b[8]=-m2;
      d[1]=m2;d[2]=-m2;d[3]=m1;d[4]=-m1;d[5]=-m2;d[6]=m2;d[7]=-m1;d[8]=m1;
      q.push(si);
      p.push(sj);
      f[si][sj]=0;
      while(!q.empty() && !p.empty())
      {
      for(int i=1;i<=8;i++)
      {
      	
      	int x=q.front()+b[i];
      	int y=p.front()+d[i];
      	
      	if( ( a[x][y]==1 || a[x][y]==4 ) && x>0 && y>0 && x<=m  && y<=n )
      	{
      		q.push(x);
      		p.push(y);
      		f[x][y]=min(f[x][y],f[q.front()][p.front()]+1);
      		if(a[x][y]==4) 
    		{
    			printf("%d",f[x][y]);
    		  return 0;
    	   }
      		a[x][y]=0;
    	}
      }
        q.pop();
       	p.pop();
      }
    }
    
    
    • 1

    信息

    ID
    955
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者