基于visual Studio2013解决C语言竞赛题之1079狼羊过河_上传


题目

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_#include_02


解决代码及点评
/************************************************************************/
/*
79. 猎人过河。
猎人要把一只狼,一头羊和一些白菜从河的左岸带到右岸,但他的船太小,
一次只能带一样,因为狼要吃羊,羊会吃白菜,所以狼和羊,羊和白菜不能在无人监视的情况下相处
,问猎人怎样才能达到目的? 请编程序实现猎人过河。

*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
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;//定义结束标志
void Move(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)新建工程

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_i++_03

2)选择工程

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_创建工程_04

3)创建完工程如下图:

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_上传_05

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

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_#include_06

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

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_i++_07

6)添加文件

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_i++_08

7)拷贝代码与运行

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_上传_09


程序运行结果

基于visual Studio2013解决C语言竞赛题之1079狼羊过河_#include_10