具体参考《算法图解》这本书第7章讲的,原书是用python写的,我用PHP再写一次,并稍加完善
把书上这三道练习题,拿来测试
网上再找了一个稍“难”点的题
上代码:
class ShortPath{
protected $graph=[];//只需要存每个节点所对应的邻居们,就能表示一个图了
protected $parents=[];//保存父级关系,最终能通过这个数组,回溯走过的最短路线
protected $costs;//从起点,到每个节点的花销
protected $infinity=999999;//用一个很大的数字,来代表一个正无穷大
protected $processed=[];//已处理过的节点的key
public function __construct($graph)
{
$this->graph=$graph;
//初始化父级数组, 即:只知道start的邻居,就是start的父级
foreach ($this->graph['start'] as $k=>$v) {
$this->parents[$k]='start';
}
//初始化花销数组,即:只知道start的邻居节点的花销,其它节点都是正无穷
foreach ($this->graph as $k=>$v) {
if($k=='start'){
$this->costs=$this->graph['start'];
}elseif(empty($this->costs[$k])){
$this-&g