10.6 最短通路问题:BFS 和 迪克斯特拉算法(Dijkstra)

本文介绍了最短通路问题的两种解决算法:BFS(广度优先搜索)和迪克斯特拉算法。BFS适用于无权图,通过逐层探索找到最短路径;迪克斯特拉算法则处理加权图,通过逐步更新最短距离。文中附带了算法的详细步骤和示例解释。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

10.6 最短通路问题:BFS 和 迪克斯特拉算法

参考的一个油管视频,中文的,讲解的很好

BFS:广度优先搜索算法

BFS

这里先介绍广度优先算法,它能处理没有加权的最短路径。具体步骤很简单,举个例子就行了,比如下面这张图:

你人在上海,你需要去广州,那么如何获取最短路径呢?首先你先确定从上海出发,能够到达的城市有哪些,接下来,再依次考虑这些城市能到达的下一个城市,其中最快能确定到达广州的,就是你的路线图。具体步骤如下:

  1. 考量的城市:上海
  2. 考量的城市:南京,深圳
  3. 考量的城市:北京,武汉,广州

这里已经命中了广州,所以最短路径为:上海-深圳-广州。

再来是具体的代码:

<?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;
            }
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值