小说网 找小说 无限小说 烟雨红尘 幻想小说 酷文学 深夜书屋

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







题目


解决代码及点评

/************************************************************************/
/* 
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)新建工程

2)选择工程

3)创建完工程如下图:

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

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

6)添加文件

7)拷贝代码与运行


程序运行结果


代码下载

http://download.csdn.net/detail/yincheng01/6681845

解压密码:c.itcast.cn






posted on 2013-12-10 14:48  牛栏山1  阅读(198)  评论(0编辑  收藏  举报

导航