| function modified Dijkstra (G, S, D): |
| for each vertex v in Graph: |
| //Initializations |
| cost [v]:= infinity; |
| //Unknown cost function from S to v |
| previous [v]:= undefined; |
| //Previous node in optimal path from S |
| end for; |
| cost [S]:= 0; |
| Q:= the set of all nodes in Graph; |
| while Q is not empty: |
| u:= vertex in Q with smallest cost ; |
| if cost [u] = infinity: |
| break; |
| //remaining vertices inaccessible from S |
| fi; |
| remove u from Q; |
| for each neighbor v of u: |
| //where v has not yet been |
| removed from Q. |
| temp:= 1− (1−cost [u]) linkmetric(u,v); |
| //link cost for PDR |
| temp:= cost [u] + 1/linkmetric(u,v); |
| //link cost for Throughput |
| or Energy Efficiency |
| if alt < cost [v]: |
| cost [v]:= temp; |
| //Update new metric |
| previous [v]:= u; |
| //Update new path |
| fi; |
| end for; |
| end while; |
| return cost ; |
| path:= empty sequence |
| //find shortest path between S and D |
| d:= D |
| while previous [d] is defined: |
| insert u at the beginning of path |
| d:= previous [d] |
| end while |
| return path; |
| end modified Dijkstra. |