是数据太水了吗,不加优化的BFS竟然过了
查看原帖
是数据太水了吗,不加优化的BFS竟然过了
774862
Pwtking楼主2023/2/26 07:44

如题

代码如下

#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x7fffffff
ll xf,yf,n,r,c,mapp[1010][1010],vis[1010][1010][10],ans=inf;
ll ax[4]={0,0,1,-1},ay[4]={1,-1,0,0};
struct note {
	ll x,y,push;
}a,b;
int main() {
	std::ios::sync_with_stdio(false);
	cin>>n>>xf>>yf;
	for (ll i=1;i<=n;++i) {
		ll a,b;
		cin>>a>>b;
		mapp[a][b]=1;
		r=max(r,a);
		c=max(c,b);
	}
	queue<note> q;
	q.push((note){xf,yf,0});
	vis[xf][yf][0];
	while (!q.empty()) {
		a=q.front();
		q.pop();
		for (ll i=0;i<4;++i) {
			ll nx=a.x+ax[i],ny=a.y+ay[i];
			if (nx>r||ny>c||nx<0||ny<0) {
				ans=min(ans,a.push);
				continue;
			}
			if (nx==ny&&nx==0) {
				ans=min(ans,b.push);
				continue;
			}
			if (mapp[nx][ny]) {
				b.x=nx,b.y=ny,b.push=a.push+1;
				if (!vis[nx][ny][b.push]) q.push(b);
				vis[nx][ny][b.push]=1;
			}
			else {
				b.x=nx,b.y=ny,b.push=a.push;
				if (!vis[nx][ny][b.push]) q.push(b);
				vis[nx][ny][b.push]=1;
			}
		}
	}
	cout<<ans;
	return 0;
} 

AC记录

2023/2/26 07:44
加载中...