/*
依次枚举每一个点,很水的一道搜素题目,被我写的这么弱智,其实也是看啊哈上面
写的,说实话,这样的写法真的是简单易懂,很能理解暴力枚举的特点,一个一个点
的枚举,一个一个点的找,只要找到了我们需要的目标解,ok记录下来,继续往下找
然后对于所有找到的解进行更新,找到一个最大的,那么就是我们所说的ans了。
记住4方向搜索的方法,以后会陆续更新8方向的搜素,这些都是在题目中很常见的QAQ
以向下搜素为例,其余三个方向类推就好。
x = i;y = j;//在进行搜素之前,一定要保留这个点的坐标,如果这个点的坐标没了,
那么在某个方向搜索结束后,就不知道该怎么返回到原目标点了,
也就是说,必须要记录初始搜素点的位置。
while ( a[x][y]!='#' )
{
if ( a[x][y] == '.' )
sum++;
x++;
}
*/
# include<cstdio>
# include<iostream>
using namespace std;
char a[20][21];
int map = 0;
int sum = 0;
int p,q,x,y,n,m;
int main(void)
{
cin>>n>>m;
for ( int i = 0;i < n;i++ )
{
for ( int j = 0;j < m;j++ )
{
cin>>a[i][j];
}
}
for ( int i = 0;i < n;i++ )
{
for ( int j = 0;j < m;j++ )
{
if ( a[i][j] == '.' )
{
sum = 0;
x = i;y = j;
while ( a[x][y]!='#')
{
if ( a[x][y] == 'G' )
sum++;
x++;
}
x = i;y = j;
while ( a[x][y]!='#' )
{
if ( a[x][y] == 'G' )
sum++;
x--;
}
x = i;y = j;
while ( a[x][y]!='#' )
{
if ( a[x][y] == 'G' )
sum++;
y--;
}
x = i;y = j;
while ( a[x][y]!='#' )
{
if ( a[x][y] == 'G' )
sum++;
y++;
}
if ( sum>map )
map = sum;
p = i;
q = j;
}
}
}
cout<<p<<" "<<q<<endl;
cout<<map<<endl;
return 0;
}
炸弹人(暴力枚举)
最新推荐文章于 2020-07-06 17:13:49 发布