int s[100],t = 0;
void BA(int a[4],int b[4]);
void徐(int a[4])
{
int i,j,k;
for(I = 0;我& lt3;i++)for(j = I+1;j & lt4;j++)if(a[I]& lt;a[j])
{
k = a[I];
a[I]= a[j];
a[j]= k;
}
}
int f(int a[4],int x)
{
int i,j=0,b[4];
for(I = 0;a[I];i++)
{
if(i==x)繼續;
b[j]= a[I];
如果(j & amp& ampb[j]==b[j-1]-1)返回1;
j++;
}
返回0;
}
整數g()
{
int i,r;
for(I = t-1;我& gt= t/2;i-=2)
{
for(r = 0;r & ltt-I;r++)if(s[t-r]!= s[I-r])break;
if(r==t-i)破;
}
如果(我& ltt/2)返回0;
否則返回1;
}
void huan(int a[4],int b[4],int x)
{
int I;
for(I = 0;壹個[我]!= x;i++);
a[I]= 0;
b[3]= x;
徐(壹);
徐(乙等);
}
void AB(int a[4],int b[4])
{
int I;
for(I = 0;a[I-1]| | I = = 0;i++)
{
if(f(a,I))繼續;
s[t]= a[I];
if(g())繼續;
歡(a,b,s[t]);
t++;
if(a[0]= = 0)break;
BA(甲,乙);
if(a[0]= = 0)break;
t-;
歡(b,a,s[t]);
}
}
void BA(int a[4],int b[4])
{
int I;
for(I = 0;b[I-1]| | I = = 0;i++)
{
if(f(b,I))繼續;
s[t]= b[I];
if(g())繼續;
歡(b,a,s[t]);
t++;
AB(a,b);
if(a[0]= = 0)break;
t-;
歡(a,b,s[t]);
}
}
void main()
{
int i,a[4]={3,2,1},b[4]= { 0 };
AB(a,b);
for(I = 0;我& ltt;i++)
{
If(i%2)printf("農民從B銀行到A銀行:");
Else printf("從A銀行到B銀行的農民:");
開關
{
案例0:printf(" nothing ");打破;
案例1:printf(“帶狼過河”);打破;
案例二:printf(“牽羊過河”);打破;
案例三:printf(“把食物帶過河”);打破;
}
printf(" \ n ");
}
}