#include <cstdio>
#include <iostream>
#include <iomanip>
#include <string>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <set>
#include <vector>
#include <map>
#include <algorithm>
#include <cmath>
#include <stack>
#define INF 0x3f3f3f3f
#define IMAX 2147483646
#define LINF 0x3f3f3f3f3f3f3f3f
#define ll long long
#define c unsigned long long
#define uint unsigned int
using namespace std;
const int dx[] = { 1,1,-1,-1,2,2,-2,-2 };
const int dy[] = { 2,-2,2,-2,1,-1,1,-1 };
struct Node {
int x, y, val;
}a,te;
queue<Node> q;
char mp[155][155];
int n, m;
int v[155][155], sx, sy, tx, ty,ans;
int main() {
scanf("%d%d", &m, &n);
for (int i = 0; i < n; i++) {
scanf("%s", mp[i]);
for (int j = 0; j < m; j++)
if (mp[i][j] == 'K')sx = i, sy = j;
}
for (int i = 0; i < n; i++)
cout << mp[i] << endl;
cout << sx << " " << sy << endl;
a.x = sx, a.y = sy, a.val = 0;
q.push(a);
ans = -1;
while (!q.empty()) {
a = q.front();
q.pop();
for (int i = 0; i < 8; i++) {
tx = a.x + dx[i];
ty = a.y + dy[i];
if (tx < 0 || tx > n || ty < 0 || ty>m
|| mp[tx][ty] == '*' || v[tx][ty] == 1)
continue;
if (mp[tx][ty] == 'H') {
ans = a.val + 1;
break;
}
v[tx][ty] = 1;
te.x = tx;
te.y = ty;
te.val = a.val + 1;
q.push(te);
}
if (ans>0)break;
}
printf("%d\n", ans);
return 0;
}
ch 2906 宽搜
最新推荐文章于 2021-02-24 14:48:07 发布