matlab dijkstra 函数,Matlab中图论求最短路径之Dijkstra

matlab中有自带的算法,既适用于稀疏图也可用于稠密图。

>> help graphshortestpath

GRAPHSHORTESTPATH solves the shortest path problem in graph.

[DIST,PATH,PRED] = GRAPHSHORTESTPATH(G,S) determines the single source

shortest paths from node S to all other nodes in the graph G. Weights of

the edges are all nonzero entries in the n-by-n adjacency matrix

represented by the sparse matrix G. DIST are the n distances from source

to every node (using Inf for non-reachable nodes and zero for the source

node). The PATH contains the winning paths to every node, and PRED

contains the predecessor nodes of the winning paths.

[DIST,PATH,PRED] = GRAPHSHORTESTPATH(G,S,D) determines the single

source-single destination shortest path from node S to node D.

GRAPHSHORTESTPATH(...,'METHOD',METHOD) selects the algorithm to use,

options are:

'BFS'          - Breadth First Search, assumes all the weights are

equal, edges are nonzero entries in the sparse matrix

G. Time complexity is O(n+e).

['Dijkstra']    - Assumes that weights of the edges are all positive

values in the sparse matrix G. Time complexity is

O(log(n)*e).

'Bellman-Ford' - Assumes that weights of the edges are all nonzero

entries in the sparse matrix G. Time complexity is

O(n*e).

'Acyclic'      - The input graph must be acyclic. Assumes that weights

of the edges are all nonzero entries in the sparse

matrix G. Time complexity is O(n+e).

Note: n and e are number of nodes and edges respectively.

GRAPHSHORTESTPATH(...,'DIRECTED',false) indicates that the graph G is

undirected, upper triangle of the sparse matrix is ignored. Default is

true.

GRAPHSHORTESTPATH(...,'WEIGHTS',W) provides custom weights for the edges,

useful to indicate zero valued weights. W is a column vector with one

entry for every edge in G, traversed column-wise.

Examples:

% Create a directed graph with 6 nodes and 11 edges

W = [.41 .99 .51 .32 .15 .45 .38 .32 .36 .29 .21];

DG = sparse([6 1 2 2 3 4 4 5 5 6 1],[2 6 3 5 4 1 6 3 4 3 5],W)

h = view(biograph(DG,[],'ShowWeights','on'))

% Find shortest path from 1 to 6

[dist,path,pred] = graphshortestpath(DG,1,6)

% Mark the nodes and edges of the shortest path

set(h.Nodes(path),'Color',[1 0.4 0.4])

edges = getedgesbynodeid(h,get(h.Nodes(path),'ID'));

set(edges,'LineColor',[1 0 0])

set(edges,'LineWidth',1.5)

% Solving the previous problem for an undirected graph

UG = tril(DG + DG')

h = view(biograph(UG,[],'ShowArrows','off','ShowWeights','on'))

% Find the shortest path between node 1 and 6

[dist,path,pred] = graphshortestpath(UG,1,6,'directed',false)

% Mark the nodes and edges of the shortest path

set(h.Nodes(path),'Color',[1 0.4 0.4])

fowEdges = getedgesbynodeid(h,get(h.Nodes(path),'ID'));

revEdges = getedgesbynodeid(h,get(h.Nodes(fliplr(path)),'ID'));

edges = [fowEdges;revEdges];

set(edges,'LineColor',[1 0 0])

set(edges,'LineWidth',1.5)

See also: graphallshortestpaths, graphconncomp, graphisdag,

graphisomorphism, graphisspantree, graphmaxflow, graphminspantree,

graphpred2path, graphtheorydemo, graphtopoorder, graphtraverse.

References:

[1]        E.W. Dijkstra "A note on two problems in connexion with graphs"

Numerische Mathematik, 1:269-271, 1959.

[2]        R. Bellman "On a Routing Problem" Quarterly of Applied Mathematics,

16(1):87-90, 1958.

Reference page in Help browser

doc graphshortestpath

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值