Dijkstra算法用于求解单源最短路径问题,即从一个起始节点到图中其他所有节点的最短路径
-
使用邻接矩阵: 邻接表在内存管理上更灵活,但会增加代码行数。邻接矩阵更简洁,但空间复杂度更高。对于小型图,这是可以接受的。
-
省略错误处理: 为了精简代码,我们省略了内存分配错误的检查。 实际应用中,这非常重要,但在教学示例中可以忽略。
-
简化输出: 只输出源点到其他节点的最短距离,不输出路径。
以下是一个简化的Dijkstra算法C代码,使用邻接矩阵,大约20行:
#include <stdio.h>
#include <limits.h>
#define INF INT_MAX
#define V 5 // 顶点数,需要修改
int main() {
int graph[V][V] = {
{
0, 4, 1, INF, INF},
{
4, 0, 2, 1, INF},
{
1, 2, 0, 5, INF},
{
INF, 1, 5, 0, 3},
{
INF, INF, INF, 3, 0}
}; // 邻接矩阵表示图
int dist[V];
int visited[V] = {
0};
int src = 0;
for (int i = 0; i < V; i++) dist[i] = INF;
dist[src] = 0;
for (int count = 0; count < V - 1; count++) {
int u = -1;
for (int v = 0; v < V; v++)
if (!visited[v] && (u == -1 || dist[v] < dist[u])) u = v;
visited[u] = 1;
for (int v = 0; v < V; v++)
if