for each v in G.vertices
d(v) = infinity
d(startVertex) = 0
Q <= a priority queue containing all the verties of G using d lables
while(!Q.isEmpty())
u = Q.removeMin
for each e in G.incidentEdges(u)
z = G.oppoiste(u,e)
if(z == Q.elements)
if(d(u) + w(u,z) < d(z))
d(z) = d(u) + w(u,z)
Q.replaceKey(z,d(z))
따라서 인접리스트 구조 로 표현된 경우 O(mlog(n))
최악의 경우 O(n^2 log(n))
따라서 인접리스트 구조 로 표현된 경우 _O(n*n)
즉 최악의 경우만을 생각해서 고려해보면
for each v in G.vertices
d(v) = infinity
d(s) = 0
for( i = 1 < i <= n-1)
for each e in G.edges
u = e.start
v = e.end
d(z) = min (d(z), d(u) + w(u,z))
Compute a toplological ordering of G
for each v in G.vertex
d(v) = infinity
d(startVertex) = 0
for(int i = 0 ; i < n ; i++)
for each e in G.v[i].incidentEdges
z = G.oppoiste(v[i], e)
d(z) = min (d(z), d(v[i], w(v[i], z))
for(int i = 0 ; i < n-1; i++)
for(int j = 1 ; j < n ; j++)
if(i==j)
D[i,j] = 0
else if((v1,v2) in G.edge)
D[i,j] = w(v1,v2)
else if(not (v1,v2) in G.edge))
D[i,j] = infinity
for(int k = 0 ; k < n ; k++)
for(int i = 0 ; i< n ;i++)
for(int j = 0; j<n ;j++)
D[i,j] = min(D[i,j] , D[i,k] + D[k,j])