#include<bits/stdc++.h>
using namespace std;
int n,c[10],maxd;
struct node{
int index;
int tt[10];
};
void cl(queue<node>&q) {
queue<node>emp;
swap(emp,q);
}
queue<node>s;
void change(int i,int j,int q,int b[10]){
int p;
int c1[10],c2[10];
for(p=1;p<=n;p++)
c[p]=b[p];
for(p=i;p<=j;p++)
c1[p-i+1]=b[p];
for(p=j+1;p<=q;p++)
c2[p-j]=b[p];
for(p=i;p<=i+q-j-1;p++)
c[p]=c2[p-i+1];
for(p=i+q-j;p<=q;p++)
c[p]=c1[p-i-q+j+1];
}
int bfs(){
int i,j,q,p;
node l;
while(!s.empty()){
l=s.front();
int d,b[10],c1[10],c2[10];
for(i=1;i<=n;i++)
b[i]=l.tt[i];
d=l.index;
s.pop();
for(i=1;i<=n;i++)
for(j=i;j<=n;j++)
for(q=j+1;q<=n;q++){
change(i,j,q,b);
int h=0;
for(p=1;p<=n;p++)
if(c[p+1]!=c[p]+1&&(c[p]!=n||p!=n))h++;
if(3*d+h<=3*maxd){
for(p=1;p<=n;p++)
l.tt[p]=c[p];
l.index=d+1;
s.push(l);
bool ok=1;
for(p=1;p<=n;p++)
if(c[p]!=p){
ok=0;
break;
}
if(ok)return d+1;
}
}
}
return 0;
}
int main(){
int i,a[10],ans,cas=0;
while(scanf("%d",&n)){
cas++;
if(n==0)break;
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
bool ok=1;
for(i=1;i<=n;i++)
if(a[i]!=i){
ok=0;
break;
}
ans=0;
if(ok!=1)
for(maxd=1;maxd<=8;maxd++){
cl(s);
node l;
l.index=0;
for(i=1;i<=n;i++)
l.tt[i]=a[i];
s.push(l);
int ls=bfs();
if(ls){
ans=ls;
break;
}
}
printf("Case %d: %d\n",cas,ans);
}
return 0;
}
UVA 11212 Editing a Book
最新推荐文章于 2024-11-07 22:09:08 发布