使用 Dijkstra 算法寻找最短路径

2023-11-27

我需要找到图的两个顶点之间的最短路线。我有一个矩阵,其中包含所有权重。我该怎么做?目前,我有以下代码:

private int[] Dijkstra(int start, int end)
    {
        bool[] done = new bool[8];
        int[] parent = new int[8];
        for (int i = 0; i < parent.Length; i++)
            parent[i] = -1;
        int[] distances = new int[8];
        for (int i = 0; i < distances.Length; i++)
            distances[i] = int.MaxValue;
        distances[start] = 0;
        int current = start;
        while (!done[current])
        {
            done[current] = true;
            for (int i = 0; i < 8; i++)
            {
                if (graph[current, i] != int.MaxValue)
                {
                    int dist = graph[current, i] + distances[current];
                    if (dist < distances[i])
                    {
                        distances[i] = dist;
                        parent[i] = current;
                    }
                }
            }
            int min = int.MaxValue;
            for (int i = 0; i < 8; i++)
            {
                if (distances[i] < min&&!done[i])
                {
                    current = i;
                    min = distances[i];
                }
            }
        }
        return parent;
    }

它可以工作,但是,我不知道如何让它找到 1 和 3 之间的最短路线,并返回 1=>4=>2=>3 这样的路线。
提前致谢。


Dijkstra 算法使用父数组来跟踪从开始到结束的最短路径。您将从parent[end] 开始并跟踪数组的条目,直到回到开始为止。

一些伪代码:

List<int> shortestPath = new List<int>();
int current = end;
while( current != start ) {
     shortestPath.Add( current );
     current = parent[current];
}

shortestPath.Reverse();

对于函数,您唯一需要担心的是传入的开始值和结束值是否是适当的值(例如,它们是否实际上代表图形中的顶点)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Dijkstra 算法寻找最短路径 的相关文章

随机推荐

  • 什么是头文件和库文件? [复制]

    这个问题在这里已经有答案了 可能的重复 头文件和库有什么区别 谁能告诉我头文件和库文件的实际含义是什么以及它们的区别 例如 我们在程序中包含扩展名为 h 的头文件 它只是定义 但实际的实现是在库文件中定义的 这是在链接阶段完成的 这就是人们
  • C# 中 ++i 与 i += 1 有性能差异吗?

    i a 应等于 i i a 在 a 1 的情况下 据说它的效率不如 i 因为它涉及更多的内存访问 或者编译器会让它与 i 完全相同吗 答案很简单 C 编译器将 C 源代码转换为 IL 操作码 没有专用的 IL 操作码可以执行与 运算符等效的
  • 存储为 BINARY XML 时 Oracle XMLType 有多大

    Oracle 文档声称它将 XMLType 存储为 BINARY XML 比存储为 CLOB 更紧凑 但是我如何知道二进制 xml 占用了多少空间呢 CREATE TABLE t x XMLTYPE XMLTYPE x STORE AS B
  • logback - 重新映射特定记录器的日志级别

    我有一个 logback 配置 其中有一个带有阈值过滤器的附加程序
  • 如何在react中设置cookie?

    本来我是用下面的ajax来设置cookie的 function setCookieAjax ajax url Web Servlet setCookie contentType application x www form urlencod
  • 使用 Javascript 将 XML 转换为 CSV

    我正在寻求一些帮助 尝试将从 Amazon Product API 检索到的 XML 转换为 CSV 逗号分隔值 格式 我在这里找到了类似的主题 XML 到 CSV 转换问题但它使用 PHP 我想使用 javascript 这是我所拥有的示
  • 模型 Score() 与 r2_score 之间的差异

    我正在训练 Linear Regression 分类器并尝试衡量其预测准确性 from sklearn metrics import r2 score from sklearn linear model import LinearRegre
  • Pandas Dataframe 滚动两列和两行

    我得到了一个包含两列的数据框 其中包含经度和纬度坐标 将 pandas 导入为 pd values Latitude 0 47 021503365600005 1 47 021503365600005 2 47 02150336560000
  • 在 MVC 3 Razor 中显示上传的图像

    好吧 这个新手在显示上传到服务器的图像时犯了一些错误 model public class Person public int ID get set public string Name get set public string Imag
  • 如何在模态对话框中设置输入值?

    我正在研究 添加链接 功能 为此我正在使用来自 Twitter Bootstrap JS 的模态插件 在主页上只有 链接 字段需要填写 当用户单击 添加链接 按钮时 会弹出一个模式 用户会看到填写 3 个字段的完整表单 链接 标题 标签 但
  • 找到接口 org.apache.poi.util.POILogger,但类是预期错误

    public String readExcel String columnname String UserType try FileInputStream file new FileInputStream path SuppressWarn
  • require() 实际上返回什么,文件还是函数

    例如 我有 profile js var EventEmitter require events EventEmitter var https require https var http require http var util req
  • Java BigDecimal:四舍五入到最接近的整数值

    我需要以下结果 100 12 gt 100 00 100 44 gt 100 00 100 50 gt 101 00 100 75 gt 101 00 round or setScale 我该怎么办 您可以使用setScale 将小数位数减
  • 我正在运行什么 GCD 队列(无论是主队列还是非队列)?

    我正在尝试编写一些线程安全的方法 所以我使用 dispatch queue t main dispatch get main queue dispatch sync main self doSomethingInTheForeground
  • Accepts_nested_attributes_for:我做错了什么

    我尝试在rails4中创建一对多连接 但是 虽然我没有收到错误 但嵌套属性未存储 我究竟做错了什么 车站模型 class Station lt ActiveRecord Base has many adresses accepts nest
  • 更改 DEFAULT_AUTO_FIELD 时迁移依赖项模型

    我正在使用 Django 3 2 我已更改将此行添加到settings py DEFAULT AUTO FIELD django db models BigAutoField 然后我运行这些命令 python manage py makem
  • 创建满足给定条件的连续天数组

    我在 SQL Server 中有以下数据结构表 ID Date Allocation 1 2012 01 01 0 2 2012 01 02 2 3 2012 01 03 0 4 2012 01 04 0 5 2012 01 05 0 6
  • 引起一致 GC 流失的技术

    我正在寻找基准测试 同时应对大量正在进行的垃圾收集 我之前已经对其在稳定的单线程运行中的行为进行了基准测试 现在我想在压力更大的 JVM 中进行相同的测试 本质上 我希望后台线程以相当一致的速度创建和销毁对象 我正在寻找有关如何实现稳定但
  • git 子模块到底是如何工作的

    The gitmodulefile 仅指定模块存储库 url 如何git submodule知道要下载哪个版本吗 它似乎总是检查最新版本 那么 开发者如何保证主项目和子模块之间的兼容性呢 您的子模块被表示为具有特殊模式的特殊条目 称为git
  • 使用 Dijkstra 算法寻找最短路径

    我需要找到图的两个顶点之间的最短路线 我有一个矩阵 其中包含所有权重 我该怎么做 目前 我有以下代码 private int Dijkstra int start int end bool done new bool 8 int paren