急!!09年9月16号中午之前给出答案 求农夫过河问题用C语言编程

来源:百度知道 编辑:UC知道 时间:2024/06/03 22:54:05
要求有注释分析和流程图(一个不能少) 流程图要包含算法中的判断过程,不要百度上搜到的那些根据结果来的流程图
一个农夫带着一只羊,一条狼和一颗白菜想从河的东岸到西岸去。河上仅有一条船。假设他每次只能带一只羊,或者一条狼,或者一颗白菜过河,并且当人不在场时,狼和羊,或羊和白菜不能单独在一起。试编写程序求出他带一只羊,一条狼和一颗白菜过河的办法。

#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("%s到对岸\n", name[b[i] + 1]);
}
else
{
printf("%s回本岸\n", 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