#include
#include
#include
using namespace std;
char map[200][200];
int row, col;
typedef struct node{
int x, y;
int step;
}node;//information of node
int dir[8][2] = {{-1,2}, {1,2},{2,1},{2,-1},{1,-2},{-1,-2},{-2,-1},{-2,1}};//direction of node
queue q;//queue defination
void bfs(){
node s1,s2;
while(!q.empty()){//如果队空了,就表示没有路走了
int x, y;
int m, n;
int i;//for count four directions
s1 = q.front();//父
x = s1.x;
y = s1.y;
q.pop();
for(i = 0; i < 8; i++){
m = x, n = y;
m = m + dir[i][0];
n = n + dir[i][1];
if(map[m][n] == 'H'){
printf("%d\n",s1.step + 1);
return;
}
if(map[m][n] == '*'|| m < 0 || n < 0 || m >= row || n >= col)
continue;
else {
s2.x = m;//子
s2.y = n;
s2.step = s1.step + 1;
map[m][n] = '*';
q.push(s2);
}
}
}
}
int main()
{
node start;
int i, j;
char ch;
cin >> col >> row;
for(i = 0; i < row; i++ ){
cin >> map[i];
}
for(i = 0; i < row; i++ )
for(j = 0; j < col; j++){
if(map[i][j] == 'K'){
//printf("i:%d,j:%d\n",i,j);
start.x = i;
start.y = j;
start.step = 0;
q.push(start);
//1count(start.step);
bfs();
}
}
//cout << min_step << endl;
return 0;
}
和最小步数的题很像,但是用了广搜