for v in G colorv lt WHITE Q lt MAKEQUEUE ADDQ source colorsource lt GRAY while Q not empty ID: 760102
Download Presentation The PPT/PDF document "d ef BFS (G , source):" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.
Slide1
def BFS(G, source): for v in G: color[v] <- WHITE Q <- MAKE-QUEUE() ADD(Q, source) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if color[u] == WHITE color[u] = GRAY ADD(Q, u)
Initialize
Relax
Slide2def DIJKSTRA(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, source) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if dist[u] > dist[v]+weight(u,v) dist[u] = dist[v]+weight(u,v) parent[u] <- v if color[u] == WHITE: color[u] <- GRAY ADD(Q, u)
I
nitialize
Relax
Slide3def PRIM(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, source) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if color[u] != BLACK and dist[u] > weight(u,v): dist[u] = weight(u,v) parent[u] <- v if color[u] == WHITE: color[u] <- GRAY ADD(Q, u)
Initialize
Relax
Slide4SIMPLIFICATION
(
Dijkstra
)
Slide5def DIJKSTRA(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, source) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if dist[u] > dist[v]+weight(u,v) dist[u] = dist[v]+weight(u,v) parent[u] <- v if color[u] == WHITE: color[u] <- GRAY ADD(Q, u)
I
nitialize
Relax
Slide6def DIJKSTRA(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, source) ADD(Q, all v in G) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if dist[u] > dist[v]+weight(u,v) dist[u] = dist[v]+weight(u,v) parent[u] <- v if color[u] == WHITE: color[u] <- GRAY ADD(Q, u)
I
nitialize
Relax
Slide7def DIJKSTRA(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, all v in G) while Q not empty: v <- REMOVE(Q) for u adjacent to v: if dist[u] > dist[v]+weight(u,v) dist[u] = dist[v]+weight(u,v) parent[u] <- v
I
nitialize
Relax
Slide8SIMPLIFICATION
(PRIM)
Slide9def PRIM(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, source) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if color[u] != BLACK and dist[u] > weight(u,v): dist[u] = weight(u,v) parent[u] <- v if color[u] == WHITE: color[u] <- GRAY ADD(Q, u)
Initialize
Relax
Slide10def PRIM(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, source) ADD(Q, all v in G) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if color[u] != BLACK and dist[u] > weight(u,v): dist[u] = weight(u,v) parent[u] <- v if color[u] == WHITE: color[u] <- GRAY ADD(Q, u)
Initialize
Relax
Slide11def PRIM(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-PRIORITY-QUEUE() ADD(Q, all v in G) while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if color[u] != BLACK and dist[u] > weight(u,v): dist[u] = weight(u,v) parent[u] <- v
Initialize
Relax
Slide12BFS utilizing dist[], parent[] fields
dist[] keeps track of the level
parent[] keep track of how vertex was reached
Slide13def DIJKSTRA(G, source): for v in G: color[v] <- WHITE dist[v] <- INF parent[v] <- NIL dist[source] <- 0 Q <- MAKE-QUEUE() ADD(Q, source) color[source] <- GRAY while Q not empty: v <- REMOVE(Q) color[v] <- BLACK for u adjacent to v: if color[u] == WHITE: dist[u] = dist[v]+1 parent[u] <- v color[u] <- GRAY ADD(Q, u)
Initialize
Relax