如题
代码如下
#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;
}