C++ 代码
#include<iostream>
#include<queue>
#include<cmath>
using namespace std;
const int dx[8]={2,1,-1,-2,-2,-1, 1, 2};
const int dy[8]={1,2,2 ,1, -1,-2,-2,-1};
int n,m,vis[151][151],fx,fy;
char g[151][151];
void bfs(int x,int y)
{
queue<int> q1,q2;
q1.push(x);
q2.push(y);
while(!q1.empty())
{
int nowx=q1.front(),nowy=q2.front();
q1.pop();q2.pop();
if(nowx==fx and nowy==fy)
{
cout<<vis[fx][fy];
return ;
}
else
{
for(int i=0;i<8;i++)
{
int tx=nowx+dx[i];
int ty=nowy+dy[i];
if(tx>=1 and tx<=n and ty>=1 and ty<=m and !vis[tx][ty] and g[tx][ty]!='*')
{
vis[tx][ty]=vis[nowx][nowy]+1;
q1.push(tx);
q2.push(ty);
}
}
}
}
}
int main()
{
int sx,sy;
cin>>m>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>g[i][j];
if(g[i][j]=='K')
sx=i,sy=j;
if(g[i][j]=='H')
fx=i,fy=j;
}
}
bfs(sx,sy);
return 0;
}