dijkstra算法matlab程序_Dijkstra算法例子
生活随笔
收集整理的這篇文章主要介紹了
dijkstra算法matlab程序_Dijkstra算法例子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
在Dijkstra算法代碼下載本文涉及到的代碼。
程序代碼
Dijkstra算法的程序如下:
function [d, p] = dijkstra(adj, s, t) % 使用dijkstra求最短路徑 % adj 輸入 矩陣 鄰接矩陣 % s 輸入 整數 起點 % t 輸入 整數 或 [] 終點 % d 輸出 向量 路徑長度,若t==[],則返回從起點到所有節點的路徑長度 % p 輸出 向量 或 元胞 路徑,若t==[],則返回從起點到所有節點的路徑(cell) nodes_num = size(adj, 1); dist = inf(nodes_num, 1); previous = inf(nodes_num, 1); Q = [1:nodes_num]';% 求鄰居 neighbors = cell(nodes_num, 1); for i = 1:nodes_num; neighbors{i} = find(adj(i, :) > 0); enddist(s) = 0; while ~isempty(Q)% 取出距離最小點[~, min_ind] = min(dist(Q));min_node = Q(min_ind);Q = setdiff(Q, min_node);% 若是終點,則結束程序if min_node == td = dist(min_node);p = generate_path(previous, t);return;end% 更新鄰居的距離for i = 1:length(neighbors{min_node})neighbor = neighbors{min_node}(i);alt = dist(min_node) + adj(min_node, neighbor);if alt < dist(neighbor)dist(neighbor) = alt;previous(neighbor) = min_node;endend end d = dist; p = cell(nodes_num, 1); for i = 1:nodes_num; p{i} = generate_path(previous, i); end end% 由前趨推出路徑 function path = generate_path(previous, t) path = [t]; while previous(t) <= length(previous)path = [previous(t) path];t = previous(t); end end找圖中頂點間最短距離
在這樣一張圖中,找到從A到D的最短距離和路徑。構造鄰接矩陣如下:
adj = [0 12 0 0 0 16 14;12 0 10 0 0 7 0;0 10 0 3 5 6 0;0 0 3 0 4 0 0;0 0 5 4 0 2 8;16 7 6 0 2 0 9;14 0 0 0 8 9 0];指定起點和終點,使用上面的程序計算即可:
[dist, path] = dijkstra(adj, 1, 4);結果如下:
最短距離: 22.00 路徑 : 'A' 'F' 'E' 'D'找柵格地圖中兩點間最短距離
如下圖所示柵格地圖,指定起點和終點,智能體(或機器人)只能在“上、下、左、右”四個方向移動,找出最短路徑:
結果如下:
可以直接提供鄰接矩陣給上面的程序,但是需要修改程序中求鄰居的部分(四個方向相鄰柵格中不是障礙物的柵格),同時還需要在程序中對某柵格是否是障礙物進行判斷,因為是障礙物的話程序不需要對該柵格進行規劃。
也可以為程序提供柵格數量(除障礙物)和每個柵格的鄰居,刪除程序中求鄰居的部分,修改程序中鄰居間的距離(比如為1)即可。
總結
以上是生活随笔為你收集整理的dijkstra算法matlab程序_Dijkstra算法例子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux脚本获取usb设备,Linux
- 下一篇: 单片机c语言模块化实例程序设计,单片机C