题目
求程序代码,农夫、狼、羊和白菜过河问题.
农夫、狼、羊和白菜过河问题.一个农夫带着一只狼,一只羊和一些菜过河,河边只有一条木船,由于船太小,只能装下农夫和他的一样东西,在无人看管的情况下.狼要吃羊,羊要吃菜,请问农夫如何菜能使三样东西平安过河?
程序设计课要求写出其程序代码?
农夫、狼、羊和白菜过河问题.一个农夫带着一只狼,一只羊和一些菜过河,河边只有一条木船,由于船太小,只能装下农夫和他的一样东西,在无人看管的情况下.狼要吃羊,羊要吃菜,请问农夫如何菜能使三样东西平安过河?
程序设计课要求写出其程序代码?
提问时间:2020-08-10
答案
#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到对岸 ",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;
}
结果:
带羊到对岸
空手回本岸
带狼到对岸
带羊回本岸
带菜到对岸
空手回本岸
带羊到对岸
带羊到对岸
空手回本岸
带菜到对岸
带羊回本岸
带狼到对岸
空手回本岸
带羊到对岸
Press any key to continue
加我的qq号 476758573
我帮你详细解释再给你流程图啊
虽然时间过了 但希望有用啊
另外,站长团上有产品团购,便宜有保证
#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到对岸 ",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;
}
结果:
带羊到对岸
空手回本岸
带狼到对岸
带羊回本岸
带菜到对岸
空手回本岸
带羊到对岸
带羊到对岸
空手回本岸
带菜到对岸
带羊回本岸
带狼到对岸
空手回本岸
带羊到对岸
Press any key to continue
加我的qq号 476758573
我帮你详细解释再给你流程图啊
虽然时间过了 但希望有用啊
另外,站长团上有产品团购,便宜有保证
举一反三
已知函数f(x)=x,g(x)=alnx,a∈R.若曲线y=f(x)与曲线y=g(x)相交,且在交点处有相同的切线,求a的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
奥巴马演讲不用看稿子.为什么中国领导演讲要看?
想找英语初三上学期的首字母填空练习……
英语翻译
最新试题
- 1should have done可以省略成should have 或should吗 should have been可以省略成should 或 shouil have
- 2已知tan(3x+π/4)=根号3,x属于[0,2π],求符合条件的角的集合
- 3一个水槽总量为1,则A、C两个阀门一个小时可注满2/3,B、C两个阀门1个小时可注满1/2,求单独打开C阀门一小
- 4有一枚硬币,如果抛6次,有3次正面朝上的概率是多少?
- 5求科学家帮助别人的名言
- 6半透膜将容器分为2个部分,向左边的加入10%的葡萄糖溶液,向右边加入10%的蔗糖溶液,液面一样高.问一段时间后液面如何变化,为什么?
- 7用赋值法计算二项式系数和的题目
- 8格林是他的姓吗?可以用Is Green his last name?和Is his last name Green?中的哪一个 还是都可以
- 9两列火车同时从甲乙两站相向开出,第一次相遇离甲站40公里的地方,两车相遇后仍以原速度前进,分别站后立即返回,又在离乙站20公里的地方相遇,求甲乙两站相距多少公里?
- 10火药真是中国发明的吗
热门考点