AcWing 188. 武士风度的牛
原题链接
简单
作者:
溪染
,
2020-09-28 20:20:06
,
所有人可见
,
阅读 4501
#include<bits/stdc++.h>
using namespace std;
int n,m;
char t;
int MAP[205][205];
queue< pair<int,int> > v;
int xxx,yyy;
int vis[205][205];
bool f[205][205];
const int kx[8]= {2,1,-1,-2,-2,-1, 1, 2};
const int ky[8]= {1,2,2 ,1, -1,-2,-2,-1};
void work() {
while(v.size()) {
pair<int,int> lxl=v.front();
v.pop();
f[lxl.first][lxl.second]=0;
for(int i=1; i<=8; i++) {
int tx=lxl.first+kx[i];
int ty=lxl.second+ky[i];
if(tx>0&&ty>0&&tx<=n&&ty<=m&&!MAP[tx][ty]) {
if(vis[tx][ty]>vis[lxl.first][lxl.second]+1) {
vis[tx][ty]=vis[lxl.first][lxl.second]+1;
if(!f[tx][ty]) {
f[tx][ty]=1;
v.push(make_pair(tx,ty));
}
}
}
}
}
cout<<vis[xxx][yyy]<<"\n";
}
int main() {
memset(vis,10,sizeof(vis));
cin>>m>>n;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++) {
cin>>t;
MAP[i][j]= t=='*';
if(t=='K') {
v.push(make_pair(i,j));
f[i][j]=1;
vis[i][j]=0;
} else if(t=='H') {
xxx=i;
yyy=j;
}
}
work();
return 0;
}