function shortestPath = dijkstra(adjMatrix, startNode) numNodes = size(adjMatrix, 1); dist = inf(1, numNodes); dist(startNode) = 0; visited = false(1, numNodes); for i = 1:numNodes u = minDistance(dist, visited); visited(u) = true; for v = 1:numNodes if ~visited(v) && adjMatrix(u,v) ~= inf && dist(u) + adjMatrix(u,v) < dist(v) dist(v) = dist(u) + adjMatrix(u,v); end end end shortestPath = dist; end function u = minDistance(dist, visited) minDist = inf; u = -1; for i = 1:length(dist) if ~visited(i) && dist(i) < minDist minDist = dist(i); u = i; end end end
时间: 2024-04-21 18:24:41 浏览: 86
Adaptive-Dijkstras-search-master_celldecomposed_dijkstra_cell_sh
这段代码实现了Dijkstra算法的MATLAB函数。函数`dijkstra`接受一个邻接矩阵`adjMatrix`和起始节点`startNode`作为输入,并返回一个包含起始节点到每个节点的最短距离的数组`shortestPath`。
在函数内部,首先根据邻接矩阵的大小初始化距离数组`dist`为无穷大,并将起始节点的距离设置为0。同时创建一个布尔数组`visited`用于记录节点的访问状态。
然后,通过一个循环遍历所有节点。在每次循环中,选择距离起始节点最近且未访问过的节点作为当前节点`u`,并将其标记为已访问。
接着,通过另一个循环遍历所有未访问的邻居节点`v`。如果节点`v`与当前节点`u`之间存在边,并且通过当前节点`u`到达节点`v`的路径距离比当前记录的最短距离小,则更新最短距离。
最后,函数返回最短路径结果`shortestPath`,即起始节点到每个节点的最短距离数组。
函数中还包含一个辅助函数`minDistance`,用于找到距离起始节点最近且未访问过的节点。该函数接受距离数组`dist`和访问状态数组`visited`作为输入,返回最近节点的索引`u`。
请注意,这段代码只是一个简单的示例,未考虑输入的合法性和错误处理。在实际使用中,你可能需要根据具体情况进行修改和完善。
阅读全文