BFS.
学长:可以用结构体记一下步数,搜到终点输出答案就行了。
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
struct la
{
int i,j,s;
};
queue<la> q;
int n,m;
int nx[8]={-2,-2,2,2,-1,-1,1,1};
int ny[8]={-1,1,-1,1,-2,2,-2,2};
const int maxn=150+5;
bool vis[maxn][maxn];
int map[maxn][maxn];
char a[maxn];
int bfs()
{
while(!q.empty())
{
int x=q.front().i,y=q.front().j,ss=q.front().s;
q.pop();
for(int k=0;k<8;k++)
{
la temp;
temp.i=x+nx[k];
temp.j=y+ny[k];
temp.s=ss+1;
if(temp.i>=0&&temp.i<n&&temp.j>=0&&temp.j<m&&!vis[temp.i][temp.j]&&map[temp.i][temp.j]>0)
{
if(map[temp.i][temp.j]==3)
return ss+1;
q.push(temp);
vis[temp.i][temp.j]=1;
}
}
}
}
int main()
{
scanf("%d%d",&m,&n);
for(int i=0;i<n;i++)
{
cin>>a;
for(int j=0;j<m;j++)
{
if(a[j]=='.') map[i][j]=1;
else if(a[j]=='*') map[i][j]=0;
else if(a[j]=='K')
{
map[i][j]=2;
q.push((la){i,j,0});
}
else if(a[j]=='H') map[i][j]=3;
}
}
cout<<bfs()<<endl;
return 0;
}