您的位置:首页 > 编程语言 > PHP开发

使用php完成最短路径查找

2018-01-20 23:51 169 查看
先看下面的图



实现了任意节点到其它节点的最短路径,代码可以直接复制测试,有任何不懂的可以在下面留言,我看到了一定会回复。

<?php
$list=[
'a'=>['b'=>1,'c'=>2,'d'=>3,],
'b'=>['a'=>1,'c'=>4,'e'=>9],
'c'=>['a'=>2,'b'=>4,'d'=>5,'e'=>6],
'd'=>['a'=>3,'c'=>5,'e'=>8],
'e'=>['b'=>9,'c'=>6,'d'=>8],
];
function find($node,$list,$next,$a=[]){
if(count($next)==count($list)){
return $_GET=[array_merge($next,$a)];
}
foreach($list[$node[strlen($node)-1]] as $k=>$v){
foreach($next as $n=>$m){
if($k==$n[strlen($n)-1]){
unset($list[$node][$k]);
}
}
}
foreach($list[$node[strlen($node)-1]] as $k=>$v){
$a[$node.$k]=$next[$node]+$v;
}
foreach($a as $k=>$v){
foreach($next as $n=>$m){
if($k[strlen($k)-1]==$n[strlen($n)-1]){
unset($a[$k]);
}
}
}
foreach($a as $k=>$v){
if(!isset($smallest) || $smallest>$v ){
$smallest=$v ;
$node=$k ;
}
}
$next[$node]=$smallest;
unset($smallest);
find($node,$list,$next,$a);
}
find('b',$list,['b'=>0]);
print_r($_GET);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  最短路径 算法 php