二刷提高课,题解目录在这里— 提高课的题解目录
//就很普通的走迷宫问题。。。
#include<iostream>
#include<cstring>
using namespace std;
const int N=160;
typedef pair<int ,int >PII;
PII q[N*N];
char g[N][N];
int dist[N][N];
int n,m,a,b;
int dx[]={-2,-2,-1,-1,1,1,2,2};
int dy[]={1,-1,2,-2,2,-2,1,-1};
int bfs()
{
int hh=0,tt=0;
q[0]={a,b};
dist[a][b]=0;
while(hh<=tt)
{
auto t=q[hh++];
if(g[t.first][t.second]=='H')return dist[t.first][t.second];
for(int i=0;i<8;i++)
{
int x=t.first+dx[i];
int y=t.second+dy[i];
if(x<1||x>n||y<1||y>m)continue;
if(g[x][y]=='*')continue;
if(dist[x][y]!=-1)continue;
dist[x][y]=dist[t.first][t.second]+1;
q[++tt]={x,y};
}
}
return -1;
}
int main()
{
memset(dist,-1,sizeof dist);
cin>>m>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
cin>>g[i][j];
if(g[i][j]=='K')
{
a=i;
b=j;
}
}
cout<<bfs();
}