分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

使用php完成最短路径查找

发布时间:2023-09-06 01:34责任编辑:蔡小小关键词:暂无标签
数据结构如图所示:

<?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‘=>7,‘c‘=>6,‘d‘=>8],];/*三要点:第一,初始化二个数组,一个存放已找到的最近节点,目的是防止重复寻找(如数组中已有a和b,下次从b就不用重复从b到a),另一个存放除最近节点外所有与a连接的节点距离(存放c和d)。第二,从a出发,找到和a最近的节点b。第三,从这个最近的节点b出发,找出与这个节点最近的节点c,将这个通过b找到的节点c到a的距离与所有其它节点到a的距离比较。最后,重复三个步骤即可完成全部查找。最终数组:Array ( [0] => Array ( [b] => 0 [ba] => 1 [bac] => 3 [bad] => 4 [be] => 9 [bace] => 9 [bade] => 12 ) )*/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 ; ???????} ???????} ???????????//$node=$node[strlen($node)-1]; ???$next[$node]=$smallest; ?????unset($smallest); ???????find($node,$list,$next,$a);}find(‘b‘,$list,[‘b‘=>0]); ????print_r($_GET);

参考连接:

https://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html

http://www.vithen.com/inf/1451557147.html

使用php完成最短路径查找

原文地址:https://www.cnblogs.com/xuzewu/p/8185814.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved