设为首页 收藏本站
查看: 574|回复: 0

[经验分享] php试题: 四人过桥问题

[复制链接]
发表于 2017-3-29 09:56:41 | 显示全部楼层 |阅读模式
那是一个漆黑寂静的夜 一家四口穿过了诅咒丛林来到了通往人类世界的无妄之桥 桥头仅有的一盏长明灯  映照着对过桥者的警示:无妄之桥,每次最多只可通行两人,桥上诅咒密布,必须在此长明灯庇佑下方可通过,如果38分钟内未能全员通过——后果自负。。

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

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


如何处理???



帖代码的。

穷举所有情况。

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

<?php
//建模数据
$mans=array(
1=>array(
'name'=>'老人',
'time'=>20,
),
2=>array(
'name'=>'中年人',
'time'=>10,
),
3=>array(
'name'=>'小孩',
'time'=>5,
),
4=>array(
'name'=>'青年人',
'time'=>3,
),
);
//初始未过河的人
$a=array(
1=>1,2,3,4,
);
//初始已过河的人
$b=array();
//2人过河
functionGo($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
'<fontcolor=red>';
}
echo
commonLanguage($serialize).'总时间:'.$time.'<br/>'."/r/n";
if(
$time<=38){
echo
'</font>';
}
array_pop($serialize);
}
}
//1人提灯回去
functionBack($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个人提灯回去.
functiondoBack($a,$b,$serialize=array(),$time=0){
$array=Get1Elem($b);
foreach(
$arrayas$v){
Back($a,$b,$v,$serialize,$time);
}
}
//从未过河的人中选择2个人过河.
functiondoGo($a,$b,$serialize=array(),$time=0){
$array=Get2Elem($a);
foreach(
$arrayas$v){
$a;
Go($a,$b,$v,$serialize,$time);
}
}
//从几个人中选择2个人的所有情况
functionGet2Elem($array){
$array2=$array;
foreach(
$arrayas$k=>$v){
foreach(
$array2as$kk=>$vv){
if(
$k!=$kk){
$ar=array($v,$vv);
sort($ar);
$ra[]=implode(',',$ar);
}
}
}
return
array_unique($ra);
}
//从未过河的所有人中选择1个人的所有情况
functionGet1Elem($array){
$aa=array();
foreach(
$arrayas$k=>$v){
$aa[$k]=$v;
}
return
$aa;
}
//自然语言翻译
functioncommonLanguage($serialize){
foreach(
$serializeas$v){
$v=explode(',',$v);
foreach(
$vas$kk=>$vv){
$r.=$GLOBALS['mans'][$vv]['name'].'('.$GLOBALS['mans'][$vv]['time'].')';
}
count($v)==2?$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 分钟过河的有两种走法。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-356880-1-1.html 上篇帖子: php StringFunction 字符串 下篇帖子: 学好PHP所需的基础知识
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表