80分RE两个点
数组再开大一点就RE三个点
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,vis[222][222],dx[25]={1,-1,1,-1,2,-2,2,-2},dy[25]={2,2,-2,-2,1,1,-1,-1},xx,yy,X,Y;
char a[222][222];
struct node{int x,y,cnt;};
void bfs(){
queue<node>q;
q.push({xx,yy,0});
vis[xx][yy]=1;
while(!q.empty()){
int x=q.front().x,y=q.front().y,cnt=q.front().cnt;
if(x==X&&y==Y){cout<<cnt;return;}
for(int i=0;i<8;i++){
int tx=x+dx[i],ty=y+dy[i];
if(vis[tx][ty]==0&&a[tx][ty]!='*'&&tx&&ty&&tx<=n&&ty<=m) vis[tx][ty]=1,q.push({tx,ty,cnt+1});
}
q.pop();
}
}
signed main(){
cin>>m>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
if(a[i][j]=='K') xx=i,yy=j;
if(a[i][j]=='H') X=i,Y=j;
}
}
bfs();
return 0;
}
/*
*/