#include <bits/stdc++.h>
#define MAXN 1011
using namespace std;
struct node{
int x,y,step;
}s;
int n,m;
int dir[4][2] = {{0,1},{0,-1},{1,0},{-1,0}};
int vis[MAXN][MAXN];
char maps[MAXN][MAXN];
void init(){
for(int i = 1;i <= n;i++){
for(int j = 1;j <= n;j++){
if(maps[i][j] == '#'){
if(maps[i+1][j+1] != '#')
maps[i+1][j+1] = '@';
if(maps[i-1][j+1] != '#')
maps[i-1][j+1] = '@';
if(maps[i][j+1] != '#')
maps[i][j+1] = '@';
if(maps[i+1][j] != '#')
maps[i+1][j] = '@';
if(maps[i-1][j] != '#')
maps[i-1][j] = '@';
maps[i][j] = '@';
if(maps[i+1][j-1] != '#')
maps[i+1][j-1] = '@';
if(maps[i-1][j-1] != '#')
maps[i-1][j-1] = '@';
if(maps[i][j-1] != '#')
maps[i][j-1] = '@';
}
}
}
}
int bfs(){
s.x = 1;
s.y = 1;
s.step = 0;
vis[1][1] = 1;
queue<node> que;
que.push(s);
while(!que.empty()){
node now = que.front();
que.pop();
for(int i = 0;i < 4;i++){
node next = now;
next.x += dir[i][0];
next.y += dir[i][1];
next.step++;
if(next.step > m)
return -1;
if(maps[next.x][next.y] == '@' || vis[next.x][next.y])
continue;
if(next.x == n && next.y == n)
return next.step;
vis[next.x][next.y] = 1;
que.push(next);
}
}
return -1;
}
int main(){
cin >> n >> m;
for(int i = 1;i <= n;i++)
for(int j = 1;j <= n;j++)
cin >> maps[i][j];
init();
cout << bfs();
return 0;
}
为什么样例没有敌军的时候输出8,有敌军的时候就输出10?