#include<stdio.h>
#include<stdlib.h>
char start[7] ={'a','a','a','0','b','b','b'};
char end[7] ={'b','b','b','0','a','a','a'};
char stack[1000][7];
char stack_top=0;
void debug_stack()
{
int index;
for(index=stack_top-1;index>=0;index--)
{
printf("%c %c %c %c %c %c %c ---> %d\n",stack[index][0],stack[index][1],stack[index][2],stack[index][3],stack[index][4],stack[index][5],stack[index][6],index);
}
printf("-----------------------------\n");
}
int step(char *pos)
{
int i,ret;
char tmp;
char array[7];
memcpy(array,pos,7);
for(i=0;i<6;i++)//a向右走一步
{
if((array[i]=='a')&&(array[i+1]=='0'))
{
tmp = array[i];
array[i] = array[i+1];
array[i+1] = tmp;
memcpy(stack[stack_top],array,7);
stack_top++;
step(stack[stack_top-1]);
break;
}
}
memcpy(array,pos,7);
for(i=0;i<5;i++)//a向右跳一步
{
if((array[i]=='a')&&(array[i+2]=='0'))
{
tmp = array[i];
array[i] = array[i+2];
array[i+2] = tmp;
memcpy(stack[stack_top],array,7);
stack_top++;
step(stack[stack_top-1]);
break;
}
}
memcpy(array,pos,7);
for(i=6;i>=1;i--)//b向左走一步
{
if((array[i]=='b')&&(array[i-1]=='0'))
{
tmp = array[i];
array[i] = array[i-1];
array[i-1] = tmp;
memcpy(stack[stack_top],array,7);
stack_top++;
step(stack[stack_top-1]);
break;
}
}
memcpy(array,pos,7);
for(i=6;i>=2;i--)//b向右跳一步
{
if((array[i]=='b')&&(array[i-2]=='0'))
{
tmp = array[i];
array[i] = array[i-2];
array[i-2] = tmp;
memcpy(stack[stack_top],array,7);
stack_top++;
step(stack[stack_top-1]);
break;
}
}
if(memcmp(end,array,7)==0)
{
ret = 2;
printf("bingo....\n");
debug_stack();
}
if(memcmp(pos,array,7)==0)
{
ret = 1;
}
else
{
ret = 0;
}
stack_top--;
return ret;
}
int main(int argc,char **argv)
{
printf("'a' is red The old grandmother\n");
printf("'b' is blue The old grandmother\n");
printf("'0' is The blank stone.....\n");
printf("the stard postion is: %c %c %c %c %c %c %c\n",start[0],start[1],start[2],start[3],start[4],start[5],start[6]);
printf("the end postion is: %c %c %c %c %c %c %c\n",end[0],end[1],end[2],end[3],end[4],end[5],end[6]);
step(start);
}
/*
a:向右直走一步
a:向右跳一步
b:向左直走一步
b:向左跳一步
仅有这四种走法,逐步递归下去,一定能找到两种走法,因为对称!
*/