一.问题描述
二.问题分析及思路
要解决的问题是把每个位置当炸点,排查如果在这个位置爆炸,是否能将所有的墙清空。将所有的墙清空等价于爆炸炸掉的墙=总墙数,所以只要寻找每一个位置,同行同列的墙数,判断是否等于总墙数即可。直接在输入数据的时候记录每行每列的墙数,之后遍历相加判断是否等于总墙数。
三.代码
int main()
{
int t,n,m,wall;
cin>>t;
bool flag=0;
for(int k=0;k<t;k++)
{
cin>>n>>m;
wall=0; //总墙数
flag=0; //初始为未找到
char a[n][m];
int x[n],y[m]; //记录每一行,每一列的墙数
memset(x,0,n*sizeof(int));
memset(y,0,m*sizeof(int));
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
cin>>a[i][j];
if(a[i][j]=='*')
{
wall++;
x[i]++;
y[j]++;
}
}
}
for(int i=0;i<n&&!flag;i++)
{
for(int j=0;j<m&&!flag;j++)
{
if(x[i]+y[j]>=wall)
{
flag=1;
}
}
}
if(flag==1) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 1;
}