编程解决过河问题

原创 2006年06月21日 17:37:00

问题是这样的:

一天夜晚,有四个人要过一条河,河上有一座只能承受两人重量的桥,而且桥面路况很差,要手持手电筒才能顺利通过。四人单独过河的时间分别为:2分钟、3分钟、8分钟和10分钟,并且只有一个手电筒。问:四人都过河的最短时间是多少?

大概编程思想是这样的:

(1)从四人中任挑两人过河,记录时间(两人中的慢者所需时间)

(2)让快者返回,记录时间

(3)从三人中任挑两人过河,记录时间(两人中的慢者所需时间)

(4)让快者返回,记录时间

(5)剩下两人过河,记录时间(两人中的慢者所需时间)

(6)求总时间并暂时存储,与下一个总时间比较求小值。直到试遍所有可能的组合,即得到最短时间。

以下是解题程序,都好几年了,现在连自己都看不懂了:(

#include<iostream.h>

static int b[4]={2,3,8,10};
static int a[4];
int num1,num2,time=0,result=100;

int min(int a,int b)
{  return a<b?a:b;  }

int max(int a,int b)
{  return a>b?a:b;  }

int min(int a,int b,int c)
{  a=a<b?a:b; return a<c?a:c;  }

void cross(int m,int n,int k,int r)
{
 int min,x,y,time2;
 time+=max(b[m],b[n]);
 num1=k-2; num2=4-num1;
 
  if(num2==2)
  {
   if(b[m]<b[n]){ min=b[m]; x=m; y=n; }
   else{ min=b[n]; x=n; y=m; }
  }
  
  else
  {
   if(b[m]<b[n]){ min=b[m]; x=m; y=n; }
   else { min=b[n]; x=n; y=m;}
   if(min<b[r]){ a[r]=-1; }
   else { min=b[r]; a[x]=-1; x=r; }
  }
  time+=min;
  num1++;
  if(num1==3)
   time2=time;
  a[x]=0; a[y]=-1;
  if(num1==2)
  {
   min=0;
   for(int k=0;k<4;k++)
    if(a[k]!=-1)
     min=max(min,b[k]); 
   time+=min;
   a[y]=0;
   return;
  }
  for(int i=0;i<3;i++)
   for(int j=i+1;j<4;j++)
   {
    if(a[i]!=-1 && a[j]!=-1)
    {
     cross(i,j,3,y);
     result=result<time?result:time;//result=min(result,time1);
     time=time2;
    }
   }
}

void main()
{
 int i,j;
 int alltime=100;
 for(i=0;i<3;i++)
 {
  for(j=i+1;j<4;j++)
  {
   for(int k=0;k<4;k++)
    a[k]=0;
   time=0;
   cross(i,j,4,0);
   alltime=min(alltime,result);
  }
  
 }
 cout<<"The least time is:"<<alltime<<endl;
}

用prolog解决农夫过河问题

  • 2012年03月03日 11:07
  • 758B
  • 下载

Java语言解决农夫过河问题

  • 2009年07月24日 19:56
  • 2KB
  • 下载

Java编程能力强化——狼羊过河问题

本文使用了经典的智力题来提升学生的Java编程能力,题目是3只狼和3只羊过河的问题。...

用数据结构解决农夫过河问题

  • 2009年06月17日 19:20
  • 3KB
  • 下载

Java编程能力强化——狼羊过河问题

题目:有3只狼和3只羊要过河,只有一条船,一次最多只能坐两只动物并且每次必须有动物开船,如果某一边的狼的个数大于羊的个数,羊将被吃掉,编程给出解。 关于编程思路,参考:Java编程能力强化(2)——...

acm 使用穷举法解决人鸡狗米过河的问题

在网上看了一到关于人鸡米狗过河的数学建模题。然后对其进行编码实现。方法参考来源于:http://blog.sina.com.cn/s/blog_6c138b4701011own.html 。 以下...
  • rudy45
  • rudy45
  • 2013年05月17日 14:15
  • 830

图结构解决农夫过河问题(二附源代码)

【什么是图结构】:图结构就是所有数据元素都可以连接,跟树结构有很大区别。 图结构包括两大部分: 1、顶点:所有的数据元素,每个元素就是一个顶点(数字1、2、3、4、5、6)。 2、边:连接两个元...

黑马程序员———用图论解决基础测试题之农夫过河问题

------- android培训、java培训、期待与您交流! ----------

作为非计算机专业小白,第一次写作(c++解决商人过河问题)

#include using namespace std; int a[4][4]; int i,j; int ss; //以下是验证点的函数; bool  YanZheng(int x,...

黑马程序员——猫、狗、鱼过河问题解决办法

代码实现: import java.util.ArrayList; import java.util.List; import java.util.Random; /* * 第十题:一位...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:编程解决过河问题
举报原因:
原因补充:

(最多只允许输入30个字)