10pts求调
查看原帖
10pts求调
547609
QZY2008楼主2022/9/22 00:45

码丑勿喷:

#include <bits/stdc++.h>
using namespace std;
const int N=5005;
int g[N][N];
bool vis[N][N];
char s[N][N];
int n,m;
int b1,b2;
struct Node{
	int step;
	int px,py;
};
Node q[N];
const int dx[]={0,0,1,-1};
const int dy[]={1,-1,0,0};int tail,head;
inline int bfs(int x,int y){
	vis[x][y]=1;
	head=1,tail=0;
	q[++tail].px=x,q[tail].py=y;
	q[tail].step=0;
	while (head<=tail){
		int x=q[head].px,y=q[head].py,now=q[head].step;
		head++;
		for (int i=0;i<4;i++){
			int nx,ny;
			nx=x+dx[i];
			ny=y+dy[i];
			if (g[nx][ny]==2)
				return now+1;
			if (g[nx][ny]!=1&&nx>0&&ny>0&&nx<=n&&ny<=m&&!vis[nx][ny]){
				vis[nx][ny]=1;
				q[++tail].px=nx,q[tail].py=ny,q[tail].step=now+1;
			}
		}
	}
	return -1;
}
int main(){
	scanf("%d%d",&n,&m);
	for (int i=1;i<=n;i++){
		cin>>s[i]+1;
		for (int j=1;j<=m;j++)
			g[i][j]=(s[i][j]=='X'?1:0);
	}
	int p,o;
	cin>>p>>o>>b1>>b2;
	while (p!=0&&o!=0&&b1!=0&&b2!=0){
		memset(vis,0,sizeof vis);
		for (int i=1;i<=n;i++)
			for (int j=1;j<=m;j++)
				g[i][j]=(s[i][j]=='X'?1:0);
		for (int i=p;i<=n;i++)
			if (g[i][o]!=1)
				g[i][o]=2;
		for (int i=p;i>=1;i--)
			if (g[i][o]!=1)
				g[i][o]=2;
		for (int j=o;j<=m;j++)
			if (g[p][j]!=1)
				g[p][j]=2;
		for (int j=o;j>=1;j--)
			if (g[p][j]!=1)
				g[p][j]=2;
		int ans=bfs(b1,b2);
//		for (int p=1;p<=tail;p++)
//			printf("%d %d %d\n",q[p].px,q[p].py,q[p].step);
		if (ans==-1){
			puts("Poor Harry");
			cin>>p>>o>>b1>>b2;
			continue;
		}
		cout<<bfs(b1,b2)<<endl;
		cin>>p>>o>>b1>>b2;
	}
}
2022/9/22 00:45
加载中...