题目
求程序代码,农夫、狼、羊和白菜过河问题.
农夫、狼、羊和白菜过河问题.一个农夫带着一只狼,一只羊和一些菜过河,河边只有一条木船,由于船太小,只能装下农夫和他的一样东西,在无人看管的情况下.狼要吃羊,羊要吃菜,请问农夫如何菜能使三样东西平安过河?
程序设计课要求写出其程序代码?
农夫、狼、羊和白菜过河问题.一个农夫带着一只狼,一只羊和一些菜过河,河边只有一条木船,由于船太小,只能装下农夫和他的一样东西,在无人看管的情况下.狼要吃羊,羊要吃菜,请问农夫如何菜能使三样东西平安过河?
程序设计课要求写出其程序代码?
提问时间: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的值和该切线方程.
我想写一篇关于奥巴马的演讲的文章,写哪一篇好呢?为什么好
奥巴马演讲不用看稿子.为什么中国领导演讲要看?
想找英语初三上学期的首字母填空练习……
英语翻译
最新试题
- 1判断题:一个数除以6,商是7,有余数,这个数最大可能是47,余数最大可能是5.( )
- 2糖类有哪些
- 3一个六位数是23X56X是88的倍数,这个数除以88所得的商是多少(要过程)
- 4x+3分之2加上x-4分之3 帮我
- 5求VB程序,利用Sub过程,计算两个整数的最大公约数和最小公倍数.
- 6三个数:23,51,72,各除以大于1的自然数,得到同一个余数.则这个除数是_.
- 7“.对我们有好处”翻译成英语时下面那种对 is good for us are good for us 拜托讲得越细越好,多谢
- 8英语翻译
- 9机遇只垂青那些懂得怎样追求她的人.--查理、尼克尔这句话的意思,深意,
- 10一道高数题目3(简单反常积分题)
热门考点
- 1一个小正方体至少加上几个同样的正方体才能拼成一个大长方体
- 2小明在一次登山活动中捡到一块矿石,.
- 3the project will being completed before July这个句子有什么问题?
- 4一杯盐水正好100克,其中含盐10克.从杯中倒出10克盐水后,再往杯里加满水这时杯子里的盐和水的比是多少
- 50是正整数吗?正整数包括哪些数?
- 6六年级下册14课《卖火柴的小女孩》小练笔写一首诗歌
- 7英语翻译
- 8向一定浓度的下列物质的澄清溶液中通入过量的CO2气体,最后肯定没有沉淀生成的是
- 9如果发电机电功率为1100千瓦,若改用20米高的水力发电,发电效率为55%.则每秒应从20高处流下多大体积的水?
- 10已知函数f(x)=(|x-1|-a)/1-x²是奇函数,则实数a=?