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







题目


解决代码及点评

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

2)选择工程

3)创建完工程如下图:

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

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

6)添加文件

7)拷贝代码与运行


程序运行结果


代码下载

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

密码:c.itcast.com






posted on 2013-12-10 12:06  三少爷的剑123  阅读(157)  评论(0编辑  收藏  举报

导航