Lang:G++
Edit12345678910111213141516171819202122232425262728293031#include <iostream>#include <stdio.h>using namespace std;int x[10],n,u,v,tmpa,tmpb;void Move(int a,int b){tmpa=x[a],tmpb=x[a+1];if(a>b){for(u=b;u<a;u++)x[u+2]=x[u];x[b]=tmpa;x[b+1]=tmpb;}else{for(u=a+2;u<b+2;u++)x[u-2]=x[u];x[b]=tmpa;x[b+1]=tmpb;}}int cal(int lv,int len){if(lv>15)return -1;int i,j,a,b,k,Min=100,tmp;for(i=0;i<n;i++)if(x[i]!=i+1)break;if(i==n)return lv;if(x[0]==len){if(len<3)return -1;for(i=1;i<len-1;i++){Move(i,0);tmp=cal(lv+1,len-1);if(tmp>0)Min=min(Min,tmp);Move(0,i);}return Min==100?-1:Min;}for(i=0;i<len;i++){