2 条题解

  • 1
    @ 2026-4-9 19:02:09

    太难了,看不懂

    • -3
      @ 2026-4-8 20:28:33
      using namespace std; 
      int n,m,qi,qj,zi,zj,dx[]={0,1,0,-1,1,1,-1,-1},dy[]={1,0,-1,0,1,-1,1,-1},dist[1010][1010];
      bool a[1010][1010];
      char c[1010][1010];
      int bfs()
      {
      	memset(a,0,sizeof a);
      	memset(dist,0x3f,sizeof dist);
      	queue<pair<int,int> >q;
      	q.push({qi,qj});
      	a[qi][qj]=1;
      	dist[qi][qj]=0;
      	while(!q.empty())
      	{
      		int x=q.front().first,y=q.front().second;
      		q.pop();
      		for(int i=0;i<8;i++)
      		{
      			int xx=x,yy=y;
      			while(c[xx][yy]=='O')
      			{
      				xx+=dx[i];
      				yy+=dy[i];
      				if(xx==zi&&yy==zj)return dist[x][y];
      			}
      		}
      		for(int i=0;i<4;i++)
      		{
      			int xx=x+dx[i],yy=y+dy[i];
      			if(c[xx][yy]=='O')
      			{
      				if(dist[xx][yy]>dist[x][y]+1)dist[xx][yy]=dist[x][y]+1;
      				if(!a[xx][yy])
      				{
      					a[xx][yy]=1;
      					q.push({xx,yy});
      				}
      			}
      		}
      	}
      	return -1;
      }
      int main()
      { 
      	cin>>n>>m;
      	for(int i=1;i<=n;i++)
      	{
      		for(int j=1;j<=m;j++)cin>>c[i][j];
      	}
      	while(cin>>zi>>zj>>qi>>qj,qi||qj)
      	{
      		int s=bfs();
      		if(s==-1)cout<<"Impossible!\n";
      		else cout<<s<<'\n';
      	}
      	return 0; 
      }
      
    • 1

    信息

    ID
    582
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    (无)
    递交数
    164
    已通过
    43
    上传者