求助
查看原帖
求助
998654
__sxx楼主2024/6/5 17:50
#include<bits/stdc++.h>
using namespace std;
int t;
struct node
{
	int x,y;
};
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
queue<node>q;
bool v[2005][2005];
int n,m,a[2005][2005],b[2005][2005],u=0,t1=0;
int c(int x,int y)
{
	if(x<0||x>n||y<0||y>m)return 0;
	if(a[x][y]==2&&b[x][y]==2) return 1;
	else return 0;
}
int main()
{
   cin>>t;
   while(t--)
   {
   	 char h;
   	 cin>>n>>m;
   	 u=0,t1=0;
   	 for(int i=1;i<=n;i++)
   	 {
   	 	for(int j=1;j<=m;j++)
   	    {
		v[i][j]=true;
		 
   	    cin>>h;
		if(h=='*')a[i][j]=1;
		else a[i][j]=2; 	
		}
	 }
	 for(int i=1;i<=n;i++)
	 {
	 	for(int j=1;j<=m;j++)
   	    {
	 	  if(a[i][j]==2)
		   {
		   	  if(a[i-1][j]==1||a[i][j-1]==1||a[i][j+1]==1||a[i+1][j]==1)b[i][j]=1;
		   	  else b[i][j]=2;
		   }
	  	  else b[i][j]=2;
	    }
	 }
	
	 for(int i=1;i<=n;i++)
	 {
	 	for(int j=1;j<=m;j++)
	 	{
	 		if(b[i][j]==1&&v[i][j]==true)
	 		{
	 			q.push({i,j});
	 			int s=0;
	 			s=s+c(i-1,j)+c(i,j-1)+c(i,j+1)+c(i+1,j);
	 			while(!q.empty())
	 			{
	 				node d=q.front();
	 				q.pop();
	 				v[d.x][d.y]=false;
	 				for(int i=0;i<4;i++)
	 				{
	 					int nx=d.x+dx[i],ny=d.y+dy[i];
	 					if(nx<0||nx>n||ny<0||ny>m||v[nx][ny]==false||b[nx][ny]==2)continue;
	 					q.push({nx,ny});
	 					s=s+c(nx-1,ny)+c(nx,ny-1)+c(nx,ny+1)+c(nx+1,ny);
					}
				 }
				 if(s==0) u++;
			 }
		 }
	 }
	 if(u<=1)cout<<"NO\n";
	 else cout<<"YES\n";
   }

  return 0;
}

WA25分

2024/6/5 17:50
加载中...