diolan12/dijkstra

由 ChatGPT 生成的 Dijkstra 算法的简单 PHP 实现

1.2.6 2023-11-30 10:30 UTC

This package is auto-updated.

Last update: 2024-09-30 01:18:28 UTC


README

PHP Composer Downloads Latest Stable Version License

简单 PHP 实现 Dijkstra 算法

由 OpenAI ChatGPT 生成 3月14日版本

参见 维基百科

安装

composer require diolan12/dijkstra

使用

使用 addVertexaddEdge 方法

// Adding edge
$dijkstra->addEdge('D', 'B', 5)->addEdge('D', 'C', 6);
// Is equals to adding vertex
$dijkstra->addVertex('D', ['B' => 5, 'C' => 6]);
use Diolan12\Dijkstra;

$dijkstra = new \Diolan12\Dijkstra();
// or
$dijkstra = new Dijkstra();
// or
$dijkstra = Dijkstra::instance();

// Add vertices and edges
$dijkstra->addVertex('A', ['B' => 3, 'C' => 2]);
$dijkstra->addVertex('B', ['A' => 3, 'C' => 1, 'D' => 5]);
$dijkstra->addVertex('C', ['A' => 2, 'B' => 1, 'D' => 6]);
$dijkstra->addEdge('D', 'B', 5, true)->addEdge('D', 'C', 6, true);

$paths = $dijkstra->findShortestPath('A', 'D'); // [A, C, D]

通过类实例化使用图

创建图形如下

$graph = [
    'A' => [
        'B' => 3,
        'C' => 2
    ],
    'B' => [
        'A' => 3,
        'C' => 1,
        'D' => 5
    ],
    'C' => [
        'A' => 2,
        'B' => 1,
        'D' => 6
    ],
    'D' => [
        'B' => calcDist(1, 3, 1, 6),
        'C' => 6
    ]
];

$dijkstra = Dijkstra::instance($graph);

与这种方法相同

$dijkstra->addVertex('A', ['B' => 3, 'C' => 2]);
$dijkstra->addVertex('B', ['A' => 3, 'C' => 1, 'D' => 5]);
$dijkstra->addVertex('C', ['A' => 2, 'B' => 1, 'D' => 6]);
$dijkstra->addEdge('D', 'B', 5)->addEdge('D', 'C', 6);

方法 addVertexaddEdge

addVertex: 此方法用于向图中添加顶点。顶点表示图中的一个点或节点。在 Dijkstra 算法的上下文中,顶点可以被视为网络中的位置或节点。addVertex 方法接受两个参数:顶点名称和与相邻顶点(边)对应的边权重数组。它将顶点和其相关边添加到图中。

addEdge: 此方法用于在图中添加两个顶点之间的边。边表示两个顶点之间的连接或链接。在 Dijkstra 算法的上下文中,边表示网络中两个位置之间的电缆路线或路径。addEdge 方法接受三个参数:源顶点、目标顶点和边的权重或成本。它使用指定的权重在源顶点和目标顶点之间建立连接。

总结一下,addVertex 用于向图中添加带有其相邻边的顶点,而 addEdge 用于在两个顶点之间建立带有指定权重的连接(边)。这两个方法共同允许您构建 Dijkstra 算法在网络上找到顶点之间最短路径所需的图表示。

开发测试

./vendor/bin/phpunit tests