php试题: 四人过桥问题

那是一个漆黑寂静的夜 一家四口穿过了诅咒丛林来到了通往人类世界的无妄之桥 桥头仅有的一盏长明灯 映照着对过桥者的警示:无妄之桥,每次最多只可通行两人,桥上诅咒密布,必须在此长明灯庇佑下方可通过,如果38分钟内未能全员通过——后果自负。。

四人过桥,同一时间只能过两人,并且必须有一人提灯,如何在38分钟内四人均走到桥另一端.

老人,        20分钟,
中年人,    10分钟,
小孩,        5分钟,
年青人,     3分钟


如何处理???



帖代码的。

穷举所有情况。

用到了几个函数相互递归。
复制PHP内容到剪贴板
PHP代码:

<?php
//建模数据
$mans = array(
=> array(
  
'name' => '老人',
  
'time' => 20,
),
=> array(
  
'name' => '中年人',
  
'time' => 10,
),
=> array(
  
'name' => '小孩',
  
'time' => 5,
),
=> array(
  
'name' => '青年人',
  
'time' => 3,
),
);
//初始未过河的人
$a = array(
=> 1,2,3,4,
);
//初始已过河的人
$b = array();
// 2人过河
function Go($a,$b,$m,$serialize=array(),$time=0) {
$mm explode(',',$m);
array_push($serialize,$m);
//过河
unset($a[$mm[0]]);
unset(
$a[$mm[1]]);
$b[$mm[0]] = $mm[0];
$b[$mm[1]] = $mm[1];

//
$time += max($GLOBALS['mans'][$mm[0]]['time'],$GLOBALS['mans'][$mm[1]]['time']);

if(
$a) {
  
doBack($a,$b,$serialize,$time);
}else {
  
//
  
if ($time <= 38) {
   echo 
'<font color=red>';
  }
  echo 
commonLanguage($serialize).'总时间:'.$time.'<br />'."/r/n";
  if (
$time <= 38) {
   echo 
'</font>';
  }
  
array_pop($serialize);
}
}
//1人提灯回去
function Back($a,$b,$m,$serialize=array(),$time=0) {
//过河
unset($b[$m]);
$a[$m] = $m;
array_push($serialize,$m);
//time
$time += $GLOBALS['mans'][$m]['time'];
doGo($a,$b,$serialize,$time);
}
//遍历已过河的人,从中选择1个人提灯回去.
function doBack($a,$b,$serialize=array(),$time=0) {
$array Get1Elem($b);
foreach (
$array as $v) {
  
Back($a,$b,$v,$serialize,$time);
}
}
//从未过河的人中选择2个人过河.
function doGo($a,$b,$serialize=array(),$time=0) {
$array Get2Elem($a);
foreach (
$array as $v) {
  
$a;
  
Go($a,$b,$v,$serialize,$time);
}
}
//从几个人中选择2个人的所有情况
function Get2Elem($array) {
$array2 $array;
foreach (
$array as $k => $v) {
  foreach (
$array2 as $kk => $vv) {
   if (
$k != $kk) {
    
$ar = array($v,$vv);
    
sort($ar);
    
$ra[] = implode(',',$ar);
   }
  }
}
return 
array_unique($ra);
}
//从未过河的所有人中选择1个人的所有情况
function Get1Elem($array) {
$aa = array();
foreach (
$array as $k => $v) {
  
$aa[$k] = $v;
}
return 
$aa;
}
//自然语言翻译
function commonLanguage($serialize) {
foreach (
$serialize as $v) {
  
$v explode(',',$v);
  foreach (
$v as $kk => $vv) { 
   
$r .= $GLOBALS['mans'][$vv]['name'] .'(' $GLOBALS['mans'][$vv]['time'] . ')';
  }
  
count($v) == $r .= ' => '$r.= ' <= ';
}

return 
$r;

}
//开始穷举
doGo($a,$b);
?>

运行结果:

老人(20)中年人(10) => 老人(20) <= 小孩(5)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 总时间:75
老人(20)中年人(10) => 老人(20) <= 小孩(5)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 总时间:70
老人(20)中年人(10) => 老人(20) <= 小孩(5)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 总时间:68
老人(20)中年人(10) => 老人(20) <= 老人(20)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:80
老人(20)中年人(10) => 老人(20) <= 老人(20)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 总时间:100
老人(20)中年人(10) => 老人(20) <= 老人(20)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:70
老人(20)中年人(10) => 老人(20) <= 老人(20)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:80
老人(20)中年人(10) => 老人(20) <= 老人(20)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 总时间:100
老人(20)中年人(10) => 老人(20) <= 老人(20)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:68
老人(20)中年人(10) => 中年人(10) <= 小孩(5)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 总时间:75
老人(20)中年人(10) => 中年人(10) <= 小孩(5)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:50
老人(20)中年人(10) => 中年人(10) <= 小孩(5)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:48
老人(20)中年人(10) => 中年人(10) <= 中年人(10)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 总时间:80
老人(20)中年人(10) => 中年人(10) <= 中年人(10)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:60
老人(20)中年人(10) => 中年人(10) <= 中年人(10)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:50
老人(20)中年人(10) => 中年人(10) <= 中年人(10)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 总时间:80
老人(20)中年人(10) => 中年人(10) <= 中年人(10)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:60
老人(20)中年人(10) => 中年人(10) <= 中年人(10)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:48
老人(20)小孩(5) => 老人(20) <= 中年人(10)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 总时间:75
老人(20)小孩(5) => 老人(20) <= 中年人(10)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 总时间:80
老人(20)小孩(5) => 老人(20) <= 中年人(10)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 总时间:73
老人(20)小孩(5) => 老人(20) <= 老人(20)中年人(10) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:70
老人(20)小孩(5) => 老人(20) <= 老人(20)中年人(10) => 老人(20) <= 老人(20)青年人(3) => 总时间:100
老人(20)小孩(5) => 老人(20) <= 老人(20)中年人(10) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:80
老人(20)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:75
老人(20)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 总时间:100
老人(20)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:73
老人(20)小孩(5) => 小孩(5) <= 中年人(10)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 总时间:75
老人(20)小孩(5) => 小孩(5) <= 中年人(10)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:55
老人(20)小孩(5) => 小孩(5) <= 中年人(10)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:43
老人(20)小孩(5) => 小孩(5) <= 中年人(10)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 总时间:75
老人(20)小孩(5) => 小孩(5) <= 中年人(10)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:55
老人(20)小孩(5) => 小孩(5) <= 中年人(10)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:45
老人(20)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 总时间:70
老人(20)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:45
老人(20)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:43
老人(20)青年人(3) => 老人(20) <= 中年人(10)小孩(5) => 青年人(3) <= 老人(20)青年人(3) => 总时间:73
老人(20)青年人(3) => 老人(20) <= 中年人(10)小孩(5) => 中年人(10) <= 老人(20)中年人(10) => 总时间:80
老人(20)青年人(3) => 老人(20) <= 中年人(10)小孩(5) => 小孩(5) <= 老人(20)小孩(5) => 总时间:75
老人(20)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:68
老人(20)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 老人(20) <= 老人(20)小孩(5) => 总时间:100
老人(20)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:80
老人(20)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:73
老人(20)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 老人(20) <= 老人(20)中年人(10) => 总时间:100
老人(20)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:75
老人(20)青年人(3) => 青年人(3) <= 中年人(10)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 总时间:73
老人(20)青年人(3) => 青年人(3) <= 中年人(10)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:53
老人(20)青年人(3) => 青年人(3) <= 中年人(10)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:43
老人(20)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 总时间:73
老人(20)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:53
老人(20)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:41
老人(20)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 总时间:68
老人(20)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:43
老人(20)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:41
中年人(10)小孩(5) => 中年人(10) <= 老人(20)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:55
中年人(10)小孩(5) => 中年人(10) <= 老人(20)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 总时间:80
中年人(10)小孩(5) => 中年人(10) <= 老人(20)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:53
中年人(10)小孩(5) => 中年人(10) <= 老人(20)中年人(10) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:50
中年人(10)小孩(5) => 中年人(10) <= 老人(20)中年人(10) => 老人(20) <= 老人(20)青年人(3) => 总时间:80
中年人(10)小孩(5) => 中年人(10) <= 老人(20)中年人(10) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:60
中年人(10)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 总时间:55
中年人(10)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 总时间:60
中年人(10)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 总时间:53
中年人(10)小孩(5) => 小孩(5) <= 老人(20)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:55
中年人(10)小孩(5) => 小孩(5) <= 老人(20)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 总时间:75
中年人(10)小孩(5) => 小孩(5) <= 老人(20)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:43
中年人(10)小孩(5) => 小孩(5) <= 老人(20)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:55
中年人(10)小孩(5) => 小孩(5) <= 老人(20)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 总时间:75
中年人(10)小孩(5) => 小孩(5) <= 老人(20)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:45
中年人(10)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 总时间:50
中年人(10)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 总时间:45
中年人(10)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 总时间:43
中年人(10)青年人(3) => 中年人(10) <= 老人(20)小孩(5) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:53
中年人(10)青年人(3) => 中年人(10) <= 老人(20)小孩(5) => 老人(20) <= 老人(20)中年人(10) => 总时间:80
中年人(10)青年人(3) => 中年人(10) <= 老人(20)小孩(5) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:55
中年人(10)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:48
中年人(10)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 老人(20) <= 老人(20)小孩(5) => 总时间:80
中年人(10)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:60
中年人(10)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 青年人(3) <= 老人(20)青年人(3) => 总时间:53
中年人(10)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 中年人(10) <= 老人(20)中年人(10) => 总时间:60
中年人(10)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 小孩(5) <= 老人(20)小孩(5) => 总时间:55
中年人(10)青年人(3) => 青年人(3) <= 老人(20)小孩(5) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:53
中年人(10)青年人(3) => 青年人(3) <= 老人(20)小孩(5) => 老人(20) <= 老人(20)青年人(3) => 总时间:73
中年人(10)青年人(3) => 青年人(3) <= 老人(20)小孩(5) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:43
中年人(10)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:53
中年人(10)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 老人(20) <= 老人(20)小孩(5) => 总时间:73
中年人(10)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:41
中年人(10)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 总时间:48
中年人(10)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 总时间:43
中年人(10)青年人(3) => 青年人(3) <= 小孩(5)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 总时间:41
小孩(5)青年人(3) => 小孩(5) <= 老人(20)中年人(10) => 青年人(3) <= 小孩(5)青年人(3) => 总时间:38
小孩(5)青年人(3) => 小孩(5) <= 老人(20)中年人(10) => 老人(20) <= 老人(20)小孩(5) => 总时间:70
小孩(5)青年人(3) => 小孩(5) <= 老人(20)中年人(10) => 中年人(10) <= 中年人(10)小孩(5) => 总时间:50
小孩(5)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:43
小孩(5)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 老人(20) <= 老人(20)中年人(10) => 总时间:70
小孩(5)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:45
小孩(5)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 青年人(3) <= 老人(20)青年人(3) => 总时间:43
小孩(5)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 中年人(10) <= 老人(20)中年人(10) => 总时间:50
小孩(5)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 小孩(5) <= 老人(20)小孩(5) => 总时间:45
小孩(5)青年人(3) => 青年人(3) <= 老人(20)中年人(10) => 小孩(5) <= 小孩(5)青年人(3) => 总时间:38
小孩(5)青年人(3) => 青年人(3) <= 老人(20)中年人(10) => 老人(20) <= 老人(20)青年人(3) => 总时间:68
小孩(5)青年人(3) => 青年人(3) <= 老人(20)中年人(10) => 中年人(10) <= 中年人(10)青年人(3) => 总时间:48
小孩(5)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 小孩(5) <= 中年人(10)小孩(5) => 总时间:43
小孩(5)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 老人(20) <= 老人(20)中年人(10) => 总时间:68
小孩(5)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 总时间:41
小孩(5)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 小孩(5) <= 老人(20)小孩(5) => 总时间:43
小孩(5)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 中年人(10) <= 老人(20)中年人(10) => 总时间:48
小孩(5)青年人(3) => 青年人(3) <= 中年人(10)青年人(3) => 青年人(3) <= 老人(20)青年人(3) => 总时间:41

38 分钟过河的有两种走法。 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值