TA的每日心情 | 开心 2014-6-18 08:29 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
滴水大师
 
- 积分
- 2345
|
题目
解决代码及点评[cpp] view plaincopy![]() ![]()
- <pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"></pre><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code"><pre code_snippet_id="91880" snippet_file_name="blog_20131202_1_2646179" class="cpp" name="code">/************************************************************************/
- /*
- 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=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");
- }</pre><br><br><br></pre></pre></pre>
|
|