棋盘上的决策
2025-01-24 09:36:06
发布于:上海
#include<bits/stdc++.h>
using namespace std;
//(0,0) -> (r,c) n个误导棋子
const int N = 300;
int dir[6][2] = {{1,0},{-1,0},{0,-1},{0,1},{1,1},{-1,1}};
int a[1000][1000];
int dist[1000][1000];
int n,r,c;
struct node{
int x,y;
int d;
};
int main(){
cin>>n>>r>>c;
for(int i=1;i<=n;i++){
int x ,y;
cin>>x>>y;
a[x+N][y+N]=1;//障碍
}
for(int i=0;i<1000;i++){
for(int j=0;j<1000;j++){
dist[i][j]=1e9;
}
}
dist[N][N] = 0;
queue<node> q;
q.push({N,N,0});
while(q.size()){
node t = q.front();
q.pop();
int x = t.x,y = t.y,d1 = t.d;
for(int i=0;i<6;i++){
int nx = x+dir[i][0];
int ny = y+dir[i][1];
if(nx<0 || ny<0 || nx>=1000 || ny>=1000 || a[nx][ny] == 1)continue;
if(dist[nx][ny]>dist[x][y]+1){
dist[nx][ny]=dist[x][y]+1;
q.push({nx,ny,dist[nx][ny]});
}
}
}
if(dist[r+N][c+N]==1e9)cout<<-1;
else cout<<dist[r+N][c+N];
return 0;
}
这里空空如也
有帮助,赞一个