记录每一横行和每一竖行有多少墙,然后两个for嵌套扫描出每一点能排掉多少墙,全部排掉就得到了答案。
代码如下:
#include <cstdio>
int main()
{
int w,h;
int b;
char map[1000+11][1000+11];
while (~scanf ("%d %d",&h,&w))
{
getchar();
int ww[1011] = {0};
int hh[1011] = {0};
b = 0; //墙数
for (int i = 1 ; i <= h ; i++)
{
for (int j = 1 ; j <= w ; j++)
{
scanf ("%c",&map[i][j]);
if (map[i][j] == '*')
{
b++;
hh[i]++;
ww[j]++;
}
}
getchar();
}
int flag = false;
int ans_x,ans_y;
for (int i = 1 ; i <= h ; i++)
{
for (int j = 1 ; j <= w ; j++)
{
int ant = hh[i] + ww[j];
if (map[i][j] == '*')
ant--;
if (ant == b)
{
flag = true;
ans_x = i;
ans_y = j;
break;
}
}
if (flag)
break;
}
if (flag)
printf ("YES\n%d %d\n",ans_x,ans_y);
else
printf ("NO\n");
}
return 0;
}