用C语言解决狼羊白菜过河的思路,基于visual Studio2013解决C语言竞赛题之1079狼羊过河...









0818b9ca8b590ca3270a3433284dd417.png

题目

0818b9ca8b590ca3270a3433284dd417.png

解决代码及点评

/************************************************************************/

/*

79.猎人过河。

猎人要把一只狼,一头羊和一些白菜从河的左岸带到右岸,但他的船太小,

一次只能带一样,因为狼要吃羊,羊会吃白菜,所以狼和羊,羊和白菜不能在无人监视的情况下相处

,问猎人怎样才能达到目的? 请编程序实现猎人过河。

*/

/************************************************************************/

#include

#include

static int num=0;

bool IsSafe(int *arr)

{

if (arr[0]==1&&arr[1]==1||arr[1]==1&&arr[2]==1)

{

return false;

}

else

return true;

}

void printfarr79(int *arr)

{

for (int i=0;i<3;i++)

{

printf("%5d",arr[i]);

}

}

bool flag=0;//定义结束标志

voidMove(int *farr,int*tarr,int h,int zs)//h表示方向 1表示A-B 0 表示B-A zs 表示这次送过去的标号

{

if (h&&tarr[3]==3||!h&&farr[3]==3)

{

printf("结束了");

flag=1;

return;

}

else if(flag==0)

{

for (int i=0;i<3;i++)

{if (flag==1)

break;

if (i==zs)

continue;

if (farr[i]==0)

{

continue;

}

farr[i]=0;

farr[3]--;

tarr[i]=1;

tarr[3]++;

printf("移动%d\n",i);

if (IsSafe(farr))

{

if (IsSafe(tarr)&&h&&(!flag))

{

Move(farr,tarr,h,i);

}

else if(!flag)

{

Move(tarr,farr,!h,i);

}

}

else if (flag==0)

{

farr[i]=1;

farr[3]++;

tarr[i]=0;

tarr[3]--;

printf("不符合条件回退%d\n",i);

}

}

}

}

void main()

{printf("0代表菜 1代表羊 2 代表狼");

int arr1[4]={1,1,1,3};

int arr2[4]={0};

Move(arr1,arr2,1,-1);

printf("asdasfdsf");

system("pause");

}

代码编译以及运行

由于资源上传太多,资源频道经常被锁定无法上传资源,同学们可以打开VS2013自己创建工程,步骤如下:

1)新建工程

0818b9ca8b590ca3270a3433284dd417.png

2)选择工程

0818b9ca8b590ca3270a3433284dd417.png

3)创建完工程如下图:

0818b9ca8b590ca3270a3433284dd417.png

4)增加文件,右键点击项目

0818b9ca8b590ca3270a3433284dd417.png

5)在弹出菜单里做以下选择

0818b9ca8b590ca3270a3433284dd417.png

6)添加文件

0818b9ca8b590ca3270a3433284dd417.png

7)拷贝代码与运行

0818b9ca8b590ca3270a3433284dd417.png

程序运行结果

0818b9ca8b590ca3270a3433284dd417.png

代码下载

密码:c.itcast.com







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值