#include<bits/stdc++.h>
using namespace std;
struct node{
int x[4],y[4],index;
}f[5000000];
struct node2{
int x,y;
}tar[4];
int k,head,tail,n,m,a[17][17],b[17][17],c[17][17][5],mp[17][17][17][17][17][17];
int q[10]={0,0,-1,0,1},p[10]={0,1,0,-1,0};
int bfs(){
int ax,ay,bx,by,cx,cy;
int nax,nay,nbx,nby,ncx,ncy;
head=0;
tail=1;
do{
head++;
ax=f[head].x[1];
ay=f[head].y[1];
bx=f[head].x[2];
by=f[head].y[2];
cx=f[head].x[3];
cy=f[head].y[3];
if(head==1)mp[ax][ay][bx][by][cx][cy]=1;
for(int i=0;i<=b[ax][ay];i++)
for(int j=0;j<=b[bx][by];j++)
for(int t=0;t<=b[cx][cy];t++){
nax=ax+q[c[ax][ay][i]];
nay=ay+p[c[ax][ay][i]];
nbx=bx+q[c[bx][by][j]];
nby=by+p[c[bx][by][j]];
ncx=cx+q[c[cx][cy][t]];
ncy=cy+p[c[cx][cy][t]];
if(k>1)
if((nax==nbx&&nay==nby)||(nax==ncx&&nay==ncy)||(nbx==ncx&&nby==ncy))continue;
if(nax==bx&&nay==by&&nbx==ax&&nby==ay)continue;
if(nax==cx&&nay==cy&&ncx==ax&&ncy==ay)continue;
if(k>1)
if(nbx==cx&&nby==cy&&ncx==bx&&ncy==by)continue;
if(mp[nax][nay][nbx][nby][ncx][ncy])continue;
mp[nax][nay][nbx][nby][ncx][ncy]=1;
f[++tail].x[1]=nax;
f[tail].y[1]=nay;
f[tail].x[2]=nbx;
f[tail].y[2]=nby;
f[tail].x[3]=ncx;
f[tail].y[3]=ncy;
f[tail].index=f[head].index+1;
if(nax==tar[1].x&&nay==tar[1].y&&nbx==tar[2].x&&nby==tar[2].y&&ncx==tar[3].x&&ncy==tar[3].y)return f[tail].index;
}
}while(head<tail);
return -1;
}
int main(){
int m,n,i,j,t,l=0;
while(scanf("%d%d%d",&m,&n,&k)){
if(m==0&&n==0&&k==0)break;
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof(c));
memset(mp,0,sizeof(mp));
memset(tar,0,sizeof(tar));
for(i=1;i<=n;i++){
scanf("\n");
for(j=1;j<=m;j++){
scanf("%c",&a[i][j]);
if(a[i][j]>='A'&&a[i][j]<='Z'){
tar[a[i][j]-'A'+1].x=i;
tar[a[i][j]-'A'+1].y=j;
}
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
if(a[i][j]!='#')
for(t=1;t<=4;t++)
if(a[i+q[t]][j+p[t]]!='#')
c[i][j][++b[i][j]]=t;
if(a[i][j]>='a'&&a[i][j]<='z'){
f[1].x[a[i][j]-'a'+1]=i;
f[1].y[a[i][j]-'a'+1]=j;
}
}
if(k<2){f[1].x[2]=0;f[1].y[2]=0;tar[2].x=0;tar[2].y=0;}
if(k<3){f[1].x[3]=0;f[1].y[3]=0;tar[3].x=0;tar[3].y=0;}
f[1].index=0;
printf("%d\n",bfs());
}
return 0;
}
UVA 1601 The Morning after Halloween - Japan 2007
最新推荐文章于 2020-02-20 23:26:49 发布