20分求助
查看原帖
20分求助
493127
awesomegordon楼主2022/6/21 09:08

我这道题从早上干到晚上,今天早上再干一遍,还没干出来我有这么菜吗大家帮我看看出了啥问题,我参考了一下博客,然后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帮帮我吧

2022/6/21 09:08
加载中...