不知道那出问题了,感觉思路很清晰啊?
代码:
using namespace std;
int n,m,mapp[160][160],hi,hj,ki,kj;
int px[9]={0,-1,-2,-2,-1,1,2,2,1};
int py[9]={0,-2,-1,1,2,2,1,-1,-2};
bool f[160][160];
struct point{
int x,y;
};
queue <point> q;
void bfs(int ki,int kj){
mapp[ki][kj]=0;
f[ki][kj]=1;
point a;
a.x=ki,a.y=kj;
q.push(a);
int x,y;
while(!q.empty()){
x=q.front().x,y=q.front().y;
q.pop();
for(int i=1;i<=8;i++){
int u=x+px[i],v=y+py[i];
if(u>=1 && u<=n && v>=1 && v<=m && f[u][v]==0){
mapp[u][v]=mapp[x][y]+1;
f[u][v]=1;
point b;
b.x=u,b.y=v;
q.push(b);
}
}
}
}
int main(){
char c;
cin>>n>>m;
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++){
cin>>c;
if(c=='*')f[i][j]=1;
else if(c=='K')ki=i,kj=j;
else if(c=='H')hi=i,hj=j;
}
}
bfs(ki,kj);
cout<<mapp[hi][hj];
return 0;
}