bfs 24pts求调
查看原帖
bfs 24pts求调
933814
QBW1117楼主2024/11/9 11:11

rt,WA on #3-#8 #10-#11 MLE #12

#include<bits/stdc++.h>
#define f(i,a,b) for(int i = a ; i<=b ; i++)
#define r(i,a,b) for(int i = a ; i>=b ; i--)
using namespace std;
int n,m,sx,sy,ex,ey;
const int dx[8]={-1,1,0,0,-1,1,-1,1},dy[8]={0,0,-1,1,-1,1,1,-1};
struct node{
	int x,y,s;
};
bool vis[16384][8005];
char g[16384][8005];
bool findit(int x,int y){
	if(x == ex && y == ey) return 1;
	f(i,0,7){
		int nx = x+dx[i];
		int ny = y+dy[i];
		while(nx>=1&&nx<=n&&ny>=1&&ny<=m&&g[nx][ny] == 'O'){
			if(nx == ex && ny == ey) return 1;
			nx+=dx[i];
			ny+=dy[i];
		}
	}
	return 0;
}
void bfs(){
	memset(vis,0,sizeof(vis));
	queue<node> q;
	q.push(node{sx,sy,0});
	while(!q.empty()){
		node cur = q.front();
		q.pop();
		if(findit(cur.x,cur.y)){
			cout<<cur.s<<endl;
			return ;
		}
		f(i,0,3){
			int nx = cur.x+dx[i];
			int ny = cur.y+dy[i];
			if(nx>=1 && nx<=n && ny>=1 && ny<=m && g[nx][ny] != 'X' && !vis[nx][ny]){
				vis[nx][ny] = 1;
				q.push(node{nx,ny,cur.s+1});
			}
		}
	}
	cout<<"Poor Harry\n";
}
int main(){
	cin>>n>>m;
	f(i,1,n) f(j,1,m) cin>>g[i][j];
	while(cin>>ex>>ey>>sx>>sy && ex & ey && sx && sy){
		bfs();
	}
	return 0;
}



2024/11/9 11:11
加载中...