农夫过河带了一个狗,兔子,青菜来到河边过河,农夫只能带一个过河,怎么办
运行结果如下: 带羊到对岸 空手回本岸 带狼到对岸 带羊回本岸 带菜到对岸 空手回本岸 带羊到对岸 带羊到对岸 空手回本岸 带菜到对岸 带羊回本岸 带狼到对岸 空手回本岸 带羊到对岸 以上是找出的所有解,共有两个解。 程序如下: #include #include #include #define MAX_STEP 20 //index: 0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸 int a[MAX_STEP][4]; int b[MAX_STEP]; char *name[] = { "...全部
运行结果如下: 带羊到对岸 空手回本岸 带狼到对岸 带羊回本岸 带菜到对岸 空手回本岸 带羊到对岸 带羊到对岸 空手回本岸 带菜到对岸 带羊回本岸 带狼到对岸 空手回本岸 带羊到对岸 以上是找出的所有解,共有两个解。
程序如下: #include #include #include #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("%s到对岸
", name[b[i] 1]); } else { printf("%s回本岸
", name[b[i] 1]); } } printf("
"); 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() { search(0); return 0; }。
收起