闲谈:这题太***了,我就不解释了.先试了发迭代加深,主要是测试自己会搜不,我也知道会t..)
这是迭代加深的代码:

#include <bits//stdc++.h>
using namespace std;
typedef pair<int,int> pi;
const int N=200;
char an[N][N];
int dx[8]={-2,-1,-2,-1,2,2,1,1};
int dy[8]={1,2,-1,-2,1,-1,-2,2};
int n,m;
bool ck(int x,int y)
{
    if(x<0||x>n||y<0||y>m||an[x][y]=='*') return false;
    return true;
}

bool dfs(int dep,pi start,pi end)
{
    if(start==end) return true;
    if(dep==0) return false;
    for(int i=0;i<8;i++)
    {
        int ix=start.first+dx[i];int iy=start.second+dy[i];
        if(ck(ix,iy))
        {
            pi temp={ix,iy};
            if(dfs(dep-1,temp,end)) return true;
        }
    }
    return false;
}

int main()
{
    pi start,end;
    cin>>m>>n;//m列n行.
    for(int i=0;i<n;i++) cin>>an[i];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(an[i][j]=='K')    start={i,j};
            else if(an[i][j]=='H') end={i,j};
        }
    }
    int depth=0;
    while(!dfs(depth,start,end)) depth++;
    cout<<depth<<endl;
    return 0;
}

这是bfs代码:

#include <bits//stdc++.h>
using namespace std;
typedef pair<int,int> pi;
const int N=200;
char an[N][N];
int dis[N][N];
int dx[8]={-2,-1,-2,-1,2,2,1,1};
int dy[8]={1,2,-1,-2,1,-1,-2,2};
int n,m;
int st[N][N];
pi start,ed;
bool ck(int x,int y)
{
    if(x<0||x>n||y<0||y>m||an[x][y]=='*') return false;
    return true;
}

int bfs()
{
    memset(dis,0x3f,sizeof dis);
    queue<pi>q;
    q.push(start);
    dis[start.first][start.second]=0;
    while(q.size())
    {
        pi temp=q.front();
        st[temp.first][temp.second]=true;
        q.pop();
        if(temp==ed) return dis[ed.first][ed.second];
        for(int i=0;i<8;i++)
        {
            int ix=temp.first+dx[i];
            int iy=temp.second+dy[i];
            if(st[ix][iy]) continue;
            if(ck(ix,iy))
            {
                if(dis[temp.first][temp.second]+1<dis[ix][iy])
                {
                    dis[ix][iy]=dis[temp.first][temp.second]+1;
                    q.push({ix,iy});
                }
            }
        }
    }
}

int main()
{
    cin>>m>>n;//m列n行.
    for(int i=0;i<n;i++) cin>>an[i];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(an[i][j]=='K')    start={i,j};
            else if(an[i][j]=='H') ed={i,j};
        }
    }
    cout<<bfs()<<endl;
    return 0;
}