题意:

在一个正常的点可以净化该行该列的所有细胞,判断是否可以净化所有的细胞,并且输出所选的点。

思路:

如果可以的话,一定会选n个点。 先判断每一行是否有正常细胞,然后判断每一列是否有,如果都没有肯定不能净化,然后输出每一行或者每一列的第一个正常细胞的位置就好。

#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std; int n ;
char map[110][110]; int main()
{ cin>>n;
int i , x[110] , y[110] , j;
memset(x , 0 , sizeof(x));
memset(y , 0 , sizeof(y));
for(i = 0;i < n; i++ )
{
cin>>map[i];
for(j = 0; j < n; j++)
{
if(map[i][j] == '.')
{
x[i] = 1;
y[j] = 1;
}
}
}
int b = 0, c = 0;
for(i = 0; i < n; i++)
{
if(x[i] == 0) b = 1;
if(y[i] == 0) c = 1;
}
if(b&&c)
{
cout<<"-1"<<endl;
return 0 ;
}
if(b == 0)
{
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
{
if(map[i][j] == '.')
{
cout<<i+1<<" "<<j+1<<endl;
break;
}
}
return 0;
}
if(c == 0)
{
for(j = 0; j < n; j++)
for(i = 0; i < n; i++)
{
if(map[i][j] == '.')
{
cout<<i+1<<" "<<j+1<<endl;
break;
}
}
}
return 0;
}
05-11 19:19