小小的绿题bfs求助:
#include<bits/stdc++.h>
#define SBSJ 16386
#define inf 2147483646
using namespace std;
string s[SBSJ];
vector<int> ans[SBSJ];
int zx[]={0,0,0,1,-1,1,1,-1,-1};
int zy[]={0,1,-1,0,0,-1,1,1,-1};
int n,m,xx,xy,bx,by;
bool z(int x,int y)
{
return x>-1&&y>-1&&x<n&&y<m&&s[x][y]=='O';
}
void bfs()
{
for(int i(0);i<n;i++)for(int j(0);j<m;j++)ans[i][j]=inf;
queue<pair<int,int>> q;
q.push(make_pair(xx,xy));
ans[xx][xy]=0;
while(!q.empty())
{
int X=q.front().first,Y=q.front().second;
q.pop();
for(int i(1);i<=4;i++)
{
int xxx=X+zx[i],yyy=Y+zy[i];
if(z(xxx,yyy)&&ans[xxx][yyy]==inf)
{
ans[xxx][yyy]=ans[X][Y]+1;
q.push(make_pair(xxx,yyy));
}
}
}
int Ans=inf;Ans=min(Ans,ans[bx][by]);
for(int i(1);i<=8;i++)
{
int xxx=bx+zx[i],yyy=by+zy[i];
while(z(xxx,yyy))
{
Ans=min(Ans,ans[xxx][yyy]);
xxx+=zx[i],yyy+=zy[i];
}
}
if(Ans==inf)puts("Poor Harry");else cout<<Ans<<'\n';
}
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)cin>>s[i],ans[i].resize(m+1);
while(cin>>by>>bx>>xy>>xx)
{
if(bx+by+xx+xy==0)return 0;
bx--,by--,xx--,xy--;
bfs();
}
}
这都能错,又要被/cf 了/kk