/* 依次枚举每一个点,很水的一道搜素题目,被我写的这么弱智,其实也是看啊哈上面 写的,说实话,这样的写法真的是简单易懂,很能理解暴力枚举的特点,一个一个点 的枚举,一个一个点的找,只要找到了我们需要的目标解,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; }