基于visual Studio2013解决C语言竞赛题之1089牛虎过河_i++


题目

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#pragma_02


解决代码及点评

/************************************************************************/
/*
89. 牛虎同渡问题。
三只牛和三只虎渡河,船只能容1至2只牛和虎(牛和虎各一只、单独一只牛或虎、或两只同类)。
任一岸边若虎多于牛则虎会吃牛,问怎样才能使牛不被伤害而安全过河。
*/
/************************************************************************/
#include <stdio.h>
#include <stdlib.h>
static int num=0;
bool IsSafe89(int *arr)
{
if (arr[1]!=0&&arr[0]!=0&&arr[0]<arr[1])
{
return false;

}
else
return true;
}
void printfarr89(int *arr)
{
for (int i=0;i<3;i++)
{
printf("%5d",arr[i]);
}
}
//i=0 代表1牛一虎 1代表 一牛 2 代表 1虎 3代表 二牛 4 代表 二虎
bool Move(int *farr,int*tarr,int h,int zs)//h表示方向 1表示A-B 0 表示B-A zs 表示这次送过去的标号
{ bool isfound=false;
if (h&&tarr[0]==3&&tarr[1]==3||!h&&farr[0]==3&&farr[1]==3)
{
printf("结束了");
printf("\n\n\n\n\n");

isfound=true;

}
else
{


for (int i=0;i<5;i++)
{
if (i==zs)
continue;


#pragma region 条件匹配
if (i==0)
{
if (farr[0]>=1&&farr[1]>=1)
{
farr[0]--;
farr[1]--;
tarr[0]++;
tarr[1]++;
}
else
continue;
}
if (i==1)
{
if (farr[0]>=1)
{
farr[0]--;

tarr[0]++;

}
else
continue;
}
if (i==2)
{
if (farr[1]>=1)
{

farr[1]--;

tarr[1]++;
}
else
continue;
}
if (i==3)
{
if (farr[0]>=2)
{
farr[0]=farr[0]-2;

tarr[0]=tarr[0]+2;

}
else
continue;
}
if (i==4)
{
if (farr[1]>=2)
{

farr[1]=farr[1]-2;

tarr[1]=tarr[1]+2;
}
else
continue;
}
#pragma endregion 条件匹配

if (h==0)
{printf("反反");
}
printf("移动%d\n",i);
if (IsSafe89(farr))
{
if (IsSafe89(tarr)&&h)
{
isfound= Move(farr,tarr,h,i);
}
else
{
isfound=Move(tarr,farr,!h,i);
}
if (!isfound)
{
#pragma region 条件匹配1
if (i==0)
{

farr[0]++;
farr[1]++;
tarr[0]--;
tarr[1]--;

}
if (i==1)
{

farr[0]++;

tarr[0]--;


}
if (i==2)
{


farr[1]++;

tarr[1]--;

}
if (i==3)
{

farr[0]=farr[0]+2;

tarr[0]=tarr[0]-2;


}
if (i==4)
{


farr[1]=farr[1]+2;

tarr[1]=tarr[1]-2;

}
#pragma endregion 条件匹配1
printf("不符合条件回退");
}
}
else

{
#pragma region 条件匹配1
if (i==0)
{

farr[0]++;
farr[1]++;
tarr[0]--;
tarr[1]--;

}
if (i==1)
{

farr[0]++;

tarr[0]--;


}
if (i==2)
{


farr[1]++;

tarr[1]--;

}
if (i==3)
{

farr[0]=farr[0]+2;

tarr[0]=tarr[0]-2;


}
if (i==4)
{


farr[1]=farr[1]+2;

tarr[1]=tarr[1]-2;

}
#pragma endregion 条件匹配1
printf("不符合条件回退%d\n",i);
}


}
}
return isfound;
}
void main()
{ printf("i=0 代表1牛一虎 1代表 一牛 2 代表 1虎 3代表 二牛 4 代表 二虎\n");
int arr1[2]={3,3};
int arr2[2]={0,0};
Move(arr1,arr2,1,-1);
printf("asdasfdsf");

system("pause");
}

代码编译以及运行

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

1)新建工程

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#include_03

2)选择工程

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#pragma_04

3)创建完工程如下图:

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#pragma_05

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

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#pragma_06

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

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#pragma_07

6)添加文件

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_i++_08

7)拷贝代码与运行

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#pragma_09


程序运行结果

基于visual Studio2013解决C语言竞赛题之1089牛虎过河_#include_10


代码下载​