/************************************************************************/ /* 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