第一行数据n,m表示地图的行和列,接下来的n行m列为地图,startx,starty表示小人的起点。
本题可以采用深搜或者广搜,因为边界全为'#',所以本题不用考虑边界问题。
附上代码(请帮忙debug)
#include<bits/stdc++.h>
using namespace std;
int n,m,startx,starty,num=0,maxv=-1,tx,ty;
char arr[35][35];
bool book[35][35];
int js(int x,int y){
for(int i=x;arr[i][y]!='#';i++)
if(arr[i][y]=='G')num++;
for(int i=x;arr[i][y]!='#';i--)
if(arr[i][y]=='G')num++;
for(int i=y;arr[x][i]!='#';i++)
if(arr[x][i]=='G')num++;
for(int i=y;arr[x][i]!='#';i--)
if(arr[x][i]=='G')num++;
return num;
}
void dfs(int x,int y){
if(arr[x][y]=='#'||arr[x][y]=='G')return ;
if(!book[x][y]&&arr[x][y]=='.'){
book[x][y]=true;
num=js(x,y);
if(num>maxv){
maxv=num;
tx=x;
ty=y;
}
dfs(x+1,y);
dfs(x-1,y);
dfs(x,y+1);
dfs(x,y-1);
}
}
int main(){
cin>>n>>m>>startx>>starty;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>arr[i][j];
dfs(startx,starty);
cout<<tx<<" "<<ty<<endl<<maxv;
return 0;
}
谢谢dl们