原题链接
考察:枚举
思路:
  看懂题目省事一半,所有单元格都是需要净化的,所以最少操作数是\(n\),枚举每一行,每一列,看是否覆盖所有单元格.

Code

#include <iostream>
#include <cstring>
using namespace std;
const int N = 110;
int n,cnt,row[N],col[N];
char mp[N][N];
/*
所有的单元格都是邪恶的.... 
*/ 
int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%s",mp[i]+1);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		  if(mp[i][j]=='.')
		  {
		  	row[i] = j;
		  	cnt++;
		  	break;
 		  }
	}
	if(cnt==n)
	{
		for(int i=1;i<=n;i++)
		  printf("%d %d\n",i,row[i]);
		return 0;
	}
	cnt = 0;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		  if(mp[j][i]=='.')
		  {
		  	col[i] = j;//第j行是第i列 
		  	cnt++;
		  	break;
 		  }
	}
	if(cnt==n)
	{
		for(int i=1;i<=n;i++)
		  printf("%d %d\n",col[i],i);
		return 0;
	}
	printf("-1");
	return 0;
}