滴水逆向联盟
标题:
基于visual Studio2013解决C语言竞赛题之1079狼羊过河
[打印本页]
作者:
大灰狼
时间:
2014-8-7 09:30
标题:
基于visual Studio2013解决C语言竞赛题之1079狼羊过河
题目
download1.png
(115.73 KB, 下载次数: 703)
下载附件
保存到相册
2014-8-7 09:30 上传
解决代码及点评
<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>
欢迎光临 滴水逆向联盟 (http://dtdebug.com/)
Powered by Discuz! X3.2