
题目

解决代码及点评
/************************************************************************/ /* 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