这题想通了就不难。首先先考虑什么样的情况下才会输出-1呢?只有在出现有一行并且一列全为E的时候。然后再考虑有一行全为E且每一列都至少有一个不为E的情况:
eg:EEEEE
. . . . .
. . . . .
. . . . .
. . . . .
这种情况下因为每一列至少有有一个不为E,那么就从第一列开始找到一个 ‘. ’ 输出他的坐标,然后找到第二列的‘ . ’,输出他的坐标,如此往复。
最后再考虑每一行至少有一个不为E的点且每一列至少有一个不为E的点,这时候从第一行开始找‘.’然后输出,如此往复。
注意:第一组的测试数据有问题,已用红色标记。
Sample test(s)
Input
3
.E.
E.E
.E.
Output
1 1
2 2
3 1(原为3)
#include <stdio.h>
#include <stdlib.h>
#include<string.h>
char map[105][105];
int row[105]={0},col[105]={0};
int main()
{
int n,i,j;
int r=0,c=0;
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%s",map[i]);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='E')
{row[i]++;
col[j]++;}
if(row[i]==n)r=1;//出现一行全为E
if(col[j]==n)c=1;//出现一行全为E
if(r&c)
{printf("-1\n");
return 0;}
}
}
if(r)
{
for(j=0;j<n;j++)
{
for(i=0;i<n;i++)
{
if(map[i][j]=='.')
{printf("%d %d\n",i+1,j+1);
break;}
}
}
}
else
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
if(map[i][j]=='.')
{
printf("%d %d\n",i+1,j+1);
break;
}
}
}
return 0;
}