农民过河问题

简介: #include #include #include //this program is edited by 200624101101杨振平//this paper's edited time is DEC 5th,2008 #define ...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//this program is edited by 200624101101杨振平
//this paper's edited time is DEC 5th,2008

#define MAX_STEP 20

//index: 0 - 狼,1-羊,2-菜,3-农夫,value:0-本岸,1-对岸
int a[MAX_STEP][4];
int b[MAX_STEP];
//define the thing to take
char *name[] =
{
"空手",
"带狼",
"带羊",
"带菜"
};
//implement search function
void search(int iStep)
{
 int i;
 if (a[iStep][0] + a[iStep][1] + a[iStep][2] + a[iStep][3] == 4)
 {
  for (i = 0; i < iStep; i++)
  {
   if (a[i][3] == 0)
   {
    printf("%s到对岸/n", name[b[i] + 1]);
   }
   else
   {
    printf("%s回本岸/n", name[b[i] + 1]);
   }
  }
 printf("/n");
 return;
 }
 for (i = 0; i < iStep; i++)
 {
  if (memcmp(a[i], a[iStep], sizeof(a[i])) == 0)
  {
   return;
  }
 }
 if (a[iStep][1] != a[iStep][3] && (a[iStep][2] == a[iStep][1] || a[iStep][0] == a[iStep][1]))
 {
  return;
 }
 for (i = -1; i <= 2; i++)
 {
  b[iStep] = i;
  memcpy(a[iStep + 1], a[iStep], sizeof(a[iStep + 1]));
  a[iStep + 1][3] = 1 - a[iStep + 1][3];
  if (i == -1)
  {
   search(iStep + 1);
  }
  else if (a[iStep][i] == a[iStep][3])
  {
   a[iStep + 1][i] = a[iStep + 1][3];
   search(iStep + 1);
  }
 }
}
//main function
void main()
{
search(0);
}
/*运行结果如下:
带羊到对岸
空手回本岸
带狼到对岸
带羊回本岸
带菜到对岸
空手回本岸
带羊到对岸

带羊到对岸
空手回本岸
带菜到对岸
带羊回本岸
带狼到对岸
空手回本岸
带羊到对岸
*/

目录
相关文章
|
新零售 传感器 人工智能
阿里下田,农民上岸
阿里下田,农民上岸
202 0
阿里下田,农民上岸
|
区块链 vr&ar 数据安全/隐私保护
元宇宙资本游戏里的“打金农民”
历史上曾有段时间,股票价格真的是由收益驱动的。荷兰东印度公司的股东们,哪能想到400年后的创业者,所描绘的都是些科幻小说般的异想。
161 0
|
运维 大数据 云计算
货车帮CTO冯亮:利用阿里云服务,发展物流产业互联网
如何借助云计算这一基础设施,利用大数据改变产业生态?10月12日,“互联网+物流”的独角兽企业——货车帮的CTO冯亮,在杭州云栖大会上,分享了货车帮利用阿里云服务提高货物运输效率,重构中国公路物流产业生态的实践经验。