rt,总是 −1
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y;
int t;
int s;
};
const int N = 1e3 + 3;
int a[N][N];
int v[N][N];
const int xx[4] = {0,0,1,-1}, yy[4] = {1,-1,0,0};
int c,k;
void bfs(){
queue<node> q;
q.push({1,1,0,0});
v[1][1] = 0;
while(!q.empty()){
int dx = q.front().x;
int dy = q.front().y;
int st = max(0, q.front().t - 1);
int sp = q.front().s + 1;
q.pop();
if(dx == c && dy == c){
cout<<sp - 1;
return;
}
for(int i = 0;i < 4;i++){
int sx = dx + xx[i];
int sy = dy + yy[i];
if(sx < 1 || sx > c || sy < 1 || sy > c) continue;
if(v[sx][sy]) continue;
if(a[sx][sy] == 1) continue;
if(a[sx][sy] == 2 && st == 0) continue;
if(v[sx][sy] >= st) continue;
if(a[sx][sy] == 3){
st = k;
}
cout<<sx<<" "<<sy<<endl;
v[sx][sy] = st;
q.push({sx,sy,st,sp});
}
}
cout<<-1;
}
int main(){
cin>>c>>k;
for(int i = 1;i <= c;i++){
for(int j = 1;j <= c;j++){
char r;
cin>>r;
if(r == '.'){
a[i][j] = 0;
}
else if(r == '#'){
a[i][j] = 1;
}
else if(r == 'X'){
a[i][j] = 2;
}
else if(r == '%'){
a[i][j] = 3;
}
}
}
bfs();
}