HNU程序设计-炸弹

一.问题描述

二.问题分析及思路

        要解决的问题是把每个位置当炸点,排查如果在这个位置爆炸,是否能将所有的墙清空。将所有的墙清空等价于爆炸炸掉的墙=总墙数,所以只要寻找每一个位置,同行同列的墙数,判断是否等于总墙数即可。直接在输入数据的时候记录每行每列的墙数,之后遍历相加判断是否等于总墙数。

三.代码

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;
}

Guess you like

Origin blog.csdn.net/Aaron503/article/details/121449865