我这道题从早上干到晚上,今天早上再干一遍,还没干出来我有这么菜吗大家帮我看看出了啥问题,我参考了一下博客,然后20…………
#include<bits/stdc++.h>
using namespace std;
char s[2100][2100];
int n,m;
int sx,sy,ex,ey;
char tu[2100][2100];
int vis[2100][2100];
int a[2100];
int w[][2]={0,-1,0,1,1,-1,1,0,1,1,-1,1,-1,0,-1,-1};
struct node{
int x,y;
}q[4050000];
void bfs(){
int head=1,tail=1;
vis[sx][sy]=1;
q[head].x=sx;
q[head].y=sy;
tail++;
int flag=0;
while(head<tail){
if(tu[q[head].x][q[head].y]=='E') {
printf("%d\n",a[head]);
flag=1;
break;
}
for(int i=0;i<4;i++){
int tx=q[head].x+w[i][0];
int ty=q[head].y+w[i][1];
if(tx<1||tx>n||ty<1||ty>m||vis[tx][ty]==1||tu[tx][ty]=='X'){
continue;
}
vis[tx][ty]=1;
q[tail].x=tx;
q[tail].y=ty;
a[tail]=a[head]+1;
tail++;
}
head++;
}
if(flag==0){
cout<<"Poor Harry"<<"\n";
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%s",s[i]+1);
}
while(cin>>ex>>ey>>sx>>sy){
if(ex==0&&ey==0&&sx==0&&sy==0){
break;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
tu[i][j]=s[i][j];
}
}
memset(vis,0,sizeof(vis));
tu[ex][ey]='E';
for(int i=0;i<8;i++){
int tx=ex;
int ty=ey;
while(1){
tx+=w[i][0];
ty+=w[i][1];
if(tx<1||tx>n||ty<1||ty>m||tu[tx][ty]=='X'){
break;
}
tu[tx][ty]='E';
}
}
bfs();
}
return 0;
}
azaz帮帮我吧