原题链接
考察:枚举
思路:
看懂题目省事一半,所有单元格都是需要净化的,所以最少操作数是\(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;
}