地图几个相邻节点求出 $start 到 $end 的最短路径【算法】
来源:互联网 发布:it运维管理 大数据 编辑:程序博客网 时间:2024/06/06 18:18
方法一:(找到最短路径就跳出有限制不推荐)
<?PHP$maps = [ // 点 // 相邻节点列表 1001 => [1002,1003,1005,1008,1009], 1002 => [1001,1008], 1003 => [1001,1005,1009], 1005 => [1001,1003,1004,1009], 1008 => [1001,1002,1009], 1009 => [1001,1003,1004,1005,1007,1008], 1004 => [1005,1009], 1007 => [1009] ];$obj = new parse($maps);$obj->find('1002', '1007');echo $obj->getBest();class parse{ var $data = array(); var $used = array(); var $chain = array(); function parse($data){ $this->data = $data; } /** * $start 开始节点 * $end 结束节点 * $chain 当前查找路线的经过节点 */ function find($start, $end, $chain=array()){ //将起始节点加入当前朋友链中 $chain[] = $start; //判断当前起点是否有朋友 if(!isset($this->data[$start])) return; //判断当前的起点是否认识终点 if(in_array($end, $this->data[$start])){ $chain[] = $end; $this->chain = $chain; return ; } //如果当前"未完成路径" 比 "目前的最优路径" 长, 停止当前循环 if(sizeof($chain)>=sizeof($this->chain) && sizeof($this->chain)!=0) return; //继续递归循环 foreach($this->data[$start] as $value) if(!in_array($value, $chain)) $this->find($value, $end, $chain); } function getBest(){ $str = implode('->', $this->chain); return $str==null? "can't relation": $str; }}?>
方法二:(找到所有路径,自己选择推荐)
<?PHP$maps = [ // 点 // 相邻节点列表 1001 => [1002,1003,1005,1008,1009], 1002 => [1001,1008], 1003 => [1001,1005,1009], 1005 => [1001,1003,1004,1009], 1008 => [1001,1002,1009], 1009 => [1001,1003,1004,1005,1007,1008], 1004 => [1005,1009], 1007 => [1009] ];$obj = new parse($maps);$obj->find(1002, 1007);class parse{ var $data = array(); function parse($data){ $this->data = $data; } /** * $start 开始节点 * $end 结束节点 * $chain 当前查找路线的经过节点 */ function find($start, $end, $chain=array()){ //将起始节点加入当前节点链中 $chain[] = $start; //判断当前起点是否有相邻节点 if(!isset($this->data[$start])) return; //判断当前的起点是否是终点的相邻节点 if(in_array($end, $this->data[$start])){ echo implode('->', $chain)."->$end".'<br/>'; return ; } //继续递归循环 foreach($this->data[$start] as $value) if(!in_array($value, $chain)) $this->find($value, $end, $chain); }}?>
阅读全文
0 0
- 地图几个相邻节点求出 $start 到 $end 的最短路径【算法】
- 弗洛伊德算法求出最短路径
- Dijkstra算法(一个节点到其他所有节点的最短路径)
- JS算法*START寻找最短路径
- floyd最短路径算法2,求出经过哪些路径
- 图的最短路径算法(二)-任意节点最短路径
- 算法导论 所有节点对的最短路径
- 初学A*算法求解静态地图的最短路径
- 几个最短路径算法比较
- POJ 1502 迪杰斯特拉求0节点到其他节点最短路径的最大值
- 二叉搜索树的最短路径,从根节点到叶子节点
- 所有节点对的最短路径
- 算法——所有节点对的最短路径:Floyd-Warshall算法、Johnson算法
- 最简单的最短路径算法
- 【算法导论】【Floyd-Warshall 算法】每对节点之间的最短路径
- 【深度优先_栈】:输出迷宫的所有路径,并求出最短路径长度及最短路径
- 所有节点对最短路径-Floyd-Warshall算法
- 图的所有节点对之间的最短路径—Floyd算法(C++)
- 异常----异常捕捉try&catch
- macOS 安装 mysql
- 运行Jar文件找不到mainclass
- Akka(29): Http:Server-Side-Api,Low-Level-Api
- 获取url参数window.location.search.substr(1).match(reg)
- 地图几个相邻节点求出 $start 到 $end 的最短路径【算法】
- post请求和get请求区分
- web前端好学吗?
- C#实现简单工厂模式
- 求多项式解(三种方法MATLAB)
- C#局域网下的简单即时通讯案例
- 如何理解K-L散度(相对熵)
- 提高深度学习和机器学习性能的方法
- jdk环境变量的配置