注意先输入列再输入行,坑死了
#include <bits/stdc++.h>
using namespace std;
#define x first
#define y second
typedef pair<int, int>PII;
const int N = 210;
char g[N][N];
int n, m;
int dist[N][N];
int dx[8] = { -2, -1, 1, 2, 2, 1, -1, -2 };
int dy[8] = { 1, 2, 2, 1, -1, -2, -2, -1 };
int bfs(PII start, PII end)
{
memset(dist, 0x3f, sizeof dist);
queue<PII>q;
q.push(start);
dist[start.x][start.y] = 0;
while (q.size())
{
auto t = q.front();
q.pop();
for (int i = 0; i < 8; i++)
{
int a = dx[i] + t.x, b = dy[i] + t.y;
if (a<0 || a>=n || b<0 || b>=m || g[a][b] == '*' || dist[a][b] != 0x3f3f3f3f)continue;
dist[a][b] = dist[t.x][t.y] + 1;
if (dist[end.x][end.y]!=0x3f3f3f3f) return dist[a][b];
q.push({ a,b });
}
}
}
int main()
{
cin >> m >> n;
PII start, end;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < m; j++)
{
cin >> g[i][j];
if (g[i][j] == 'K')start = { i,j };
if (g[i][j] == 'H')end = { i,j };
}
}
cout << bfs(start, end) << endl;
return 0;
}