```cpp
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <iostream>
using namespace std;
int n,m,t=0,kingx,kingy,d[30][45][30][45],a[30][45],g[9][2]={{0,0},{1,2},{2,1},{-1,2},{2,-1},{-1,-2},{-2,-1},{1,-2},{-2,1}};
struct node{
int x,y;
}f[1350];
inline bool ok(int x,int y)
{
if (x<1||x>8||y<1||y>8) return false;
return true;
}
void bds(int s1,int s2)
{
int q[1350][2],s,t,i,x,y;
memset(q,0,sizeof(q));
s=0; t=1; q[1][0]=s1; q[1][1]=s2;
while (s<t)
{
s++;
for (i=1; i<=8; i++)
{
x=q[s][0]+g[i][0];
y=q[s][1]+g[i][1];
if (ok(x,y))
if ((x!=s1||y!=s2)&&d[s1][s2][x][y]==0)
{
d[s1][s2][x][y]=d[s1][s2][q[s][0]][q[s][1]]+1;
t++; q[t][0]=x; q[t][1]=y;
}
}
}
}
int main()
{
freopen ("gamelot.in","r",stdin);
freopen ("gamelot.out","w",stdout);
int i,j,x,y,k,tmp,ans=99999999,ams;
char ch,chs;
scanf ("%d%d\n",&n,&m);
cin>>ch>>chs;
kingy=ch-64; kingx=chs-48;
chs=getchar();
while (cin>>ch)
{
t++;
f[t].y=ch-64;
cin>>ch;
f[t].x=ch-48;
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
{
bds(i,j);
for (k=1; k<=t; k++) a[i][j]+=d[i][j][f[k].x][f[k].y];
}
}
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
ams=a[i][j]+abs(kingx-i)+abs(kingy-j);
for (x=1; x<=n; x++)
for (y=1; y<=m; y++)
for (k=1; k<=t; k++)
{
tmp=a[i][j]-d[f[k].x][f[k].y][i][j]+d[f[k].x][f[k].y][x][y]+abs(kingx-x)+abs(kingy-y)+d[x][y][i][j];
if (tmp<ams) ams=tmp;
}
if (ams<ans) ans=ams;
}
printf ("%d\n",ans);
fclose (stdin); fclose (stdout);
return 0;
}
```
by 逆时针的记忆 @ 2019-07-13 16:49:23
希望更丰富的展现?使用Markdown
by 小玄XX @ 2019-07-13 16:49:30
@[ZZZ……](/space/show?uid=83006) 没换行
by 逆时针的记忆 @ 2019-07-13 16:50:47