求助:92分,一个RE
查看原帖
求助:92分,一个RE
1023793
yaodiguoan楼主2023/12/31 08:51
#include <bits/stdc++.h>
using namespace std;
struct csp{
	int x,y,step;
};
int n,m;
int dx[5]={0,1,0,-1,0};
int dy[5]={0,0,1,0,-1};
int main(){
	ios::sync_with_stdio(0);
	cin.tie(),cout.tie();
	cin>>n>>m;
	char a[n+100][m+100];
	bool res[n+100][m+100],vis[n+100][m+100];
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			cin>>a[i][j];
	while(1){
		int sx,sy,ex,ey;
		cin>>ex>>ey>>sx>>sy;
		if(sx==0&&sy==0&&ex==0&&ey==0) return 0;
		//清空 
		memset(res,0,sizeof(res));
		memset(vis,0,sizeof(vis));
		//可以看拿到奖杯的地方 
		for(int i=ex;i<=n;i++){
			if(a[i][ey]=='X') break;
			res[i][ey]=1;
		}
		for(int i=ex;i>=1;i--){
			if(a[i][ey]=='X') break;
			res[i][ey]=1;
		}
		for(int i=ey;i<=m;i++){
			if(a[ex][i]=='X') break;
			res[ex][i]=1;
		}
		for(int i=ey;i>=1;i--){
			if(a[ex][i]=='X') break;
			res[ex][i]=1;
		}
		for(int i=0;ex+i<=n,ey+i<=m;i++){
			int tx=i+ex,ty=i+ey;
			if(a[tx][ty]=='X') break;
			res[tx][ty]=1;
		}
		for(int i=0;ex+i<=n,ey-i>=1;i++){
			int tx=i+ex,ty=ey-i;
			if(a[tx][ty]=='X') break;
			res[tx][ty]=1;
		}
		for(int i=0;ex-i>=1,ey+i<=m;i++){
			int tx=ex-i,ty=i+ey;
			if(a[tx][ty]=='X') break;
			res[tx][ty]=1;
		}
		for(int i=0;ex-i>=1,ey-i>=1;i++){
			int tx=ex-i,ty=ey-i;
			if(a[tx][ty]=='X') break;
			res[tx][ty]=1;
		}
		//广搜 
		bool flag=0;
		queue<csp> q;
		q.push((csp){sx,sy,0});
		while(!q.empty()){
			int x=q.front().x;
			int y=q.front().y;
			int step=q.front().step;
			q.pop();
			if(res[x][y]){
				cout<<step<<endl;
				flag=1;
				break;
			}
			if(vis[x][y]) continue;
			vis[x][y]=1;
			for(int i=1;i<=4;i++){
				int tx=x+dx[i],ty=y+dy[i];
				if(tx>=1&&tx<=n&&ty>=1&&ty<=m&&a[tx][ty]!='X') q.push((csp){tx,ty,step+1});
			}
		}
		if(!flag) cout<<"Poor Harry\n";
	}
	return 0;
}


2023/12/31 08:51
加载中...