请问一下,为什么会重复打印两遍呢?
人狼羊菜渡河问题,不知道为什么会打印两次。
程序如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STEP 20
// index: 0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸
int a[MAX_STEP][4];
int b[MAX_STEP];
char *name[] =
{ "空手", "带狼", "带羊", "带菜"
};
void search(int iStep) {
int i;
if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4)
{
for (i = 0; i <iStep; i++)
{
if (a[i][3] == 0)
printf(" %d:%s到对岸\n", i+1,name[b[i] + 1]);
else
printf(" %d:%s回本岸\n", i+1,name[b[i] + 1]);
}
printf("\n");
return;
}
for (i = 0; i <iStep; i++)
if (memcmp(a[i], a[iStep], sizeof(a[i])) == 0)
return;
if (a[iStep][1] != a[iStep][3] &&
(a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1]))
return;
for (i = -1; i <= 2; i++)
{
b[iStep] = i;
memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1]));
a[iStep + 1][3] = 1 - a[iStep + 1][3];
if (i == -1)
search(iStep + 1);
else if (a[iStep][i] == a[iStep][3])
{
a[iStep + 1][i] = a[iStep + 1][3];
search(iStep + 1);
} } }
int main()
{
int i;
for(i=0;i<4;i++)
a[0][i]=0;
search(0);
return 0;
}