10.6 最短通路问题:BFS 和 迪克斯特拉算法
BFS:广度优先搜索算法
BFS
这里先介绍广度优先算法,它能处理没有加权的最短路径。具体步骤很简单,举个例子就行了,比如下面这张图:
你人在上海,你需要去广州,那么如何获取最短路径呢?首先你先确定从上海出发,能够到达的城市有哪些,接下来,再依次考虑这些城市能到达的下一个城市,其中最快能确定到达广州的,就是你的路线图。具体步骤如下:
- 考量的城市:上海
- 考量的城市:南京,深圳
- 考量的城市:北京,武汉,广州
这里已经命中了广州,所以最短路径为:上海-深圳-广州。
再来是具体的代码:
<?php
/**
* 初始地图
*/
$map=[
'上海'=>['南京','深圳'],
'南京'=>['上海','北京','武汉'],
'深圳'=>['上海','广州'],
'武汉'=>['南京','北京','广州'],
'北京'=>['南京','武汉','广州'],
'广州'=>['深圳','武汉','北京']
];
function BFS($map,$finalCity,$nextCities,&$passedCities){
$nextTurnCity=[];
/**
* 遍历这一轮需要检验的城市
*/
foreach($nextCities as $thisCity){
foreach($map[$thisCity] as $nextCity){
$passedCities[$nextCity]=$thisCity;
if($nextCity==$finalCity){
showResult($passedCities,$finalCity);
return true;
}