<< NL_R_DijkstraHTMultiPath NL_R: Routing NL_R_DijkstraMap >>

NARVAL >> NL_R: Routing > NL_R_DijkstraHTWeight

NL_R_DijkstraHTWeight

Perform the Dijkstra's algorithm on a network topology from a source node in respect with given links weights (shortest path to all remaining nodes).

Calling Sequence

[D,P] = NL_R_DijkstraHTWeight(N,H,T,W,I)

Arguments

N :

Network size.

H :

Links head vector.

T :

Links tail vector.

W :

Links weight vector.

I :

Source node.

D :

Distance vector from the source node towards remaining network nodes.

P :

Predecessors vector to reach the source node from remaining network nodes.

Description

NL_R_DijkstraHTWeight performs the Dijkstra's algorithm from the source node I on the network topology represented by the 3 following vectors: H, T and W. Links weights are provided by the user. D and P enable to reconstruct the shortest path between any network node towards the source node N (WIKIPEDIA).

Pseudo-Code (Wikipedia)

1  function Dijkstra(Graph, source):
2      for each vertex v in Graph:           // Initializations
3          dist[v] := infinity               // Unknown distance function from source to v
4          previous[v] := undefined          // Previous node in optimal path from source
5      dist[source] := 0                     // Distance from source to source
6      Q := the set of all nodes in Graph
// All nodes in the graph are unoptimized - thus are in Q
7      while Q is not empty:                 // The main loop
8          u := vertex in Q with smallest dist[]
9          if dist[u] = infinity:
10              break                         // all remaining vertices are inaccessible from source
11          remove u from Q
12          for each neighbor v of u:         // where v has not yet been removed from Q.
13              alt := dist[u] + dist_between(u, v) 
14              if alt is inferior to dist[v]:             // Relax (u,v,a)
15                  dist[v] := alt
16                  previous[v] := u
17      return dist[]

Examples

n=80;//network size
L=1000;//network square area side
dmax=100;//locality radius
[g]=NL_T_LocalityConnex(n,L,dmax);//generation of a random topology in respect with the Locality method. 
i=NL_F_RandInt1n(length(g.node_x))//selection of the source node
ind=1;//window index
f=NL_G_ShowGraphN(g,ind);
[dist,pred]=NL_R_DijkstraHTWeight(g.node_number,g.head,g.tail,g.edge_length,i)//Application of NL_R_DijkstraHTWeight

Dependency

NL_F_RemoveFirstOcc, NL_G_NodeNeighborsHTN

Report an issue
<< NL_R_DijkstraHTMultiPath NL_R: Routing NL_R_DijkstraMap >>