#include "stdio.h"
void gh(int p[])
{
int i,j,n;
if(p[0]==1)//在对岸时
{
if(p[1]==p[2] && p[1]==1)
{
if(p[2]==p[3])
return;
else
{
p[1]=0;
printf("农夫带狼返回\n");
}
}
else if(p[2]==p[3] && p[3]==1)
{
p[2]=0;
printf("农夫带羊返回\n");
}
else
printf("农夫返回\n");
p[0]=0;
gh(p);
}
else if(p[0]==0)//在原岸时
{
if(p[1]==p[2] && p[1]==0)
{
if(p[2]==p[3])
{
p[2]=1;
printf("农夫带羊过河\n");
}
else
{
p[1]=1;
printf("农夫带狼过河\n");
}
}
else if(p[2]==p[3] && p[3]==0)
{
p[3]=1;
printf("农夫带狼过河\n");
}
else
{
if(p[3]==p[0])
{
p[3]=1;
printf("农夫带菜过河\n");
}
else if(p[2]==p[0])
{
p[2]=1;
printf("农夫带羊过河\n");
}
else if(p[1]==p[0])
{
p[1]=1;
printf("农夫带狼过河\n");
}
}
}
p[0]=(p[0]+1) % 2;
gh(p);
}
int main()
{
int p[4]; //p[0]:农夫;p[1]:狼;p[2]:羊;p[3]白菜.
int i;
for(i=0;i<4;i++) p[i]=0;//设初值0表示原来河岸 ,1表示对岸
gh(p);
}

在河两岸采用分治方法,然后通过递归重新归化。
追问能设计成动态的吗?就是屏幕上出现的农夫的活动过程 不是文字描述 谢谢啦!
追答那用标C是没办法实现了,要用VC,你自己改一下吧.能像我这样做出来的人已经不多了。