TA的每日心情 | 开心 2014-6-18 08:29 |
---|
签到天数: 14 天 [LV.3]偶尔看看II
滴水大师
- 积分
- 2345
|
题目
解决代码及点评
- <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">/************************************************************************/
- /*
- 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);
- }
- }
- 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==0)
- {
- continue;
- }
- farr=0;
- farr[3]--;
- tarr=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=1;
- farr[3]++;
- tarr=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");
- }</pre><br><br><br></pre></pre></pre>
|
|