2 条题解

  • 0
    @ 2025-10-8 16:48:28
    #include<bits/stdc++.h>
    using namespace std;
    int dx[12]= {0,1,0,-1};
    int dy[12]= {1,0,-1,0};
    struct node {int x,y,dep;};bool v[110][110],Map[110][110];
    deque<node>Q;
    
    int main()
    {
        int n,m;scanf("%d%d",&n,&m);
        memset(Map,0,sizeof(Map));
        for(int i=1;i<=n;i++) 
    	{
            char ss[110];scanf("%s",ss+1);
            for(int j=1;j<=m;j++) Map[i][j]=(ss[j]=='1');
        }
        
    	int t;scanf("%d",&t);
        while(t--)
    	{
    		node stno,edno;
    		scanf("%d%d%d%d",&stno.x,&stno.y,&edno.x,&edno.y);
    		stno.dep=0;
    		
    		memset(v,0,sizeof(v));v[stno.x][stno.y]=1;
    	    Q.clear();Q.push_back(stno);
    	    bool bk=0;
    	    while(!Q.empty())
    		{
    	        node no=Q.front();Q.pop_front();
    			for(int i=0;i<4;i++)
    			{
    				node tno=no;
    	            tno.x+=dx[i];
    	            tno.y+=dy[i];
    	            tno.dep++;
    	            if(Map[tno.x][tno.y]==1&&v[tno.x][tno.y]==0)
                    //这里Map数组自动判排除了no.x、no.y越界问题
    				{
    	                v[tno.x][tno.y]=1;
    	                Q.push_back(tno);
    	                if(tno.x==edno.x && tno.y==edno.y) {bk=1;break;}
    	            }
    	        }
    	        if(bk==1) break;
    	    }
    	    if(bk==1)printf("%d\n",Q.back().dep);else printf("Impossible\n");  
        }
        return 0;
    }
    
    • 0
      @ 2025-10-8 16:48:19


      #include<bits/stdc++.h>
      using namespace std;
      int dx[12]= {0,1,0,-1};
      int dy[12]= {1,0,-1,0};
      struct node {int x,y,dep;};bool v[110][110],Map[110][110];
      deque<node>Q;
      

      int main() { int n,m;scanf("%d%d",&n,&m); memset(Map,0,sizeof(Map)); for(int i=1;i<=n;i++) { char ss[110];scanf("%s",ss+1); for(int j=1;j<=m;j++) Map[i][j]=(ss[j]=='1'); }

      int t;scanf("%d"&#44;&amp;t);
      while(t--)
      {
      	node stno&#44;edno;
      	scanf("%d%d%d%d"&#44;&amp;stno.x&#44;&amp;stno.y&#44;&amp;edno.x&#44;&amp;edno.y);
      	stno.dep=0;
      	
      	memset(v&#44;0&#44;sizeof(v));v[stno.x][stno.y]=1;
          Q.clear();Q.push_back(stno);
          bool bk=0;
          while(!Q.empty())
      	{
              node no=Q.front();Q.pop_front();
      		for(int i=0;i&lt;4;i++)
      		{
      			node tno=no;
                  tno.x+=dx[i];
                  tno.y+=dy[i];
                  tno.dep++;
                  if(Map[tno.x][tno.y]==1&amp;&amp;v[tno.x][tno.y]==0)
                  //这里Map数组自动判排除了no.x、no.y越界问题
      			{
                      v[tno.x][tno.y]=1;
                      Q.push_back(tno);
                      if(tno.x==edno.x &amp;&amp; tno.y==edno.y) {bk=1;break;}
                  }
              }
              if(bk==1) break;
          }
          if(bk==1)printf("%d\n"&#44;Q.back().dep);else printf("Impossible\n");  
      }
      return 0;
      

      }

      </p>





      • 1

      *【宽搜(难度:4)】海上救援任务

      信息

      ID
      90
      时间
      1000ms
      内存
      128MiB
      难度
      1
      标签
      递交数
      67
      已通过
      45
      上传者