68分,求解。(P2199)
  • 板块题目总版
  • 楼主liyuan2023
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/4/21 16:22
  • 上次更新2024/4/21 19:16:22
查看原帖
68分,求解。(P2199)
1188691
liyuan2023楼主2024/4/21 16:22

错误代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,dx[8]={-1,0,0,1,-1,-1,1,1},dy[8]={0,-1,1,0,-1,1,-1,1};
int fx,fy,ex,ey,ans;
struct node{
	int x,y,step;
};
int main(){
	cin>>n>>m;
	bool t[n+2][m+2],vis[n+2][m+2];
	int mp[n+2][m+2];
	memset(t,0,sizeof(t));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			char c;
			cin>>c;
			if(c=='O'){
				t[i][j]=1;
			}
			else{
				t[i][j]=0;
			}
		}
	}
	while(1){
		cin>>ex>>ey>>fx>>fy;
		if(fx==0){
			break;
		}
		ans=-1;
		memset(vis,0,sizeof(vis));
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				mp[i][j]=t[i][j];
			}
		}
		mp[ex][ey]=2;
		for(int i=0;i<8;i++){
			int xx=ex,yy=ey;
			while(t[xx+dx[i]][yy+dy[i]]==1){
				mp[xx+dx[i]][yy+dy[i]]=2;
				xx+=dx[i];
				yy+=dy[i];
			}
		}
		queue<node> q;
		q.push({fx,fy,0});
		vis[fx][fy]=1;
		while(!q.empty()){
			node p=q.front();
			q.pop();
			if(mp[p.x][p.y]==2){
				ans=p.step;
				break;
			}
			for(int i=0;i<4;i++){
				int xx=p.x+dx[i],yy=p.y+dy[i];
				if(mp[xx][yy]!=0&&!vis[xx][yy]){
					vis[xx][yy]=1;
					q.push({xx,yy,p.step+1});
				}
			}
		}
		if(ans!=-1){
			cout<<ans<<endl;
		}
		else{
			cout<<"Poor Harry"<<endl;
		}
	}
	return 0;
}
2024/4/21 16:22
加载中...