此题要注意输入输出问题;
行和列是反的输入的,要颠倒过来;
读清楚题中的意思;
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=105;
#define x first
#define y second
char g[N][N];
typedef pair<int,int> PII;
queue<PII> q;
int d[N][N];
int m,n;
int cnt;
int sa,sb;//起点;
int bfs(int a,int b)//从起点开始搜;
{
int i;
int dx[8]={-1,0,1,1,1,0,-1,-1};
int dy[8]={1,1,1,0,-1,-1,-1,0};//枚举以乳草为中心的8个方向;
q.push({a,b});
memset(d,-1,sizeof d);
d[a][b]=0;
while(!q.empty())
{
PII t=q.front();
q.pop();
for(i=0;i<8;i++)
{
int tx=t.x+dx[i];
int ty=t.y+dy[i];
if(tx<1||tx>n||ty<1||ty>m) continue;
if(g[tx][ty]=='*') continue;
if(d[tx][ty]!=-1) continue;
q.push({tx,ty});
d[tx][ty]=d[t.x][t.y]+1;
res++;
cnt=max(cnt,d[tx][ty]);//求最短路中的最大距离,代表充满了整个地图;
}
}
return cnt;
}
int main()
{
scanf("%d%d%d%d",&m,&n,&sa,&sb);//sb是x,sa是y;
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
cin>>g[i][j];
}
printf("%d",bfs(n+1-sb, sa));
return 0;
}