Anda di halaman 1dari 5

1

Bsqueda en Amplitud (BFS) u


BFS genera un rbol de descubrimiento de un grafo G, para esto cada vrtice v tiene los siguientes a e campos: v .: lista de adyacencia de v. v .color : color para v (blanco, plomo, negro) v .: padre de v en el rbol de descubrimiento a v .d : paso de descubrimiento de v (distancia desde la ra del rbol de descubrimiento) z a BFS(G, s) for each u V (G) {s} do u.color := blanco u.d := u. := nil s.color := plomo s.d := 0 s. := nil Q.Enqueue(s) while Q.IsEmpty() = false do u := Q.head for each v u. do if v .color = blanco then v .color := plomo v .d := u.d +1 v . := u Q.Enqueue(v) Q.Dequeue() u.color := negro

Bsqueda en Profundidad (DFS) u


DFS genera un bosque de descubrimiento de un grafo G o grafo predecesor de G, para esto cada vrtice v tiene los siguientes campos: e v .: lista de adyacencia de v. v .color : color para v (blanco, plomo, negro) v .: padre de v (o predecesor de v) en el grafo predecesor v .d : tiempo de descubrimiento de v (tiempo en el que por primera vez se visita) v .f : tiempo de nalizacin de v (tiempo en el que se han visitados todos los descencientes en o el rbol de descubrimiento) a DFS(G) for each u V (G) do u.color := blanco u. := nil t := 0 for each u V (G) do if u.color = blanco then Visita(u) Visita(u) u.color := plomo t := t + 1 u.d := t for each v u. do if v .color = blanco then v . := u Visita(v) u.color := negro t := t + 1 u.f := t

Arboles de Cobertura de Costo M nimo


Prim(G, w, r) Q := V (G) for each u Q do u.k := r .k := 0 r . := nil while Q.IsEmpty() = false do u := Q.Extract-Min() for each v u. do if v Q w(u, v) < v .k then v . := u v .k := w(u, v) Kruskal(G, w) A := o / for each v V (G) do Make-Set(v) ordena las aristas en E(G) en orden creciente segn el peso w u for each (u, v) E(G) en el orden anterior do if Find-Set(u) = Find-Set(v) then A := A {(u, v)} Union(u, v) return A

Caminos de M nimo Costo


Procedimientos para inicializar y reducir aristas. Init(G, s) for each v V (G) do v .d := v . := nil s.d := 0 Reduce(u, v, w) if v .d > u.d +w(u, v) then v .d := u.d +w(u, v) v . := u Algoritmo de Dijkstra para encontrar los caminos de m nimo costo desde un vrtice fuente. e Supone que todas las aristas tienen costos positivos. Dijkstra(G, w, s) Init(G, s) S := o / Q := V (G) while Q = o / do u := Q.Extract-Min() S := S {u} for each v u. do Reduce(u, v, w) Algoritmo de BellmanFord para encontrar los caminos de m nimo costo desde un vrtice fuente e en el caso general en que las aristas pueden tener pesos negativos. Si existe un ciclo de peso total negativo retorna false. Bellman-Ford(G, w, s) Init(G, s) for i := 1 to |V (G)| 1 do for each (u, v) E(G) do Reduce(u, v, w) for each (u, v) E(G) do if v .d > u.d +w(u, v) then return false return true

5 Algoritmo de FloydWarshall para encontrar los caminos de m nimo costo entre todos los pares de vrtices. Recibe como input una matriz de adyacencia W con los costos de las aristas y la dimensin e o n de la matriz, y retorna sobre la misma matriz el costo de los caminos de m nimo costo entre cada par de vrtices. Por simplicidad se ha supuesto que los vrtices estn numerados por 1, 2 . . . , |V (G)|. e e a La matriz tiene 0s en su diagonal y s en las posiciones correspondientes a aristas inexistentes. Floyd-Warshall(W, n) A := W for k := 1 to n do for i := 1 to n do for j := 1 to n do Wij := m n{Aij , Aik + Akj } A := W return W El siguiente es un ejemplo de ejecucin del algoritmo sobre el grafo o

1 -4 2

2 8

5
La evolucin de la matriz W es: o 0 2 3 0 4 8 0 -5 1 0 6 -4 7 0 0 2

7 6

1 4 -5

3 0 4 5

8 0 -5 k=1

1 0 6

-4 7 -2 0

0 2

3 0 4 5

8 0 -5 k=2

4 1 5 0 6

-4 7 11 -2 0

Inicalmente 0 2 3 0 4 -1 8 0 -5 k=3 4 1 5 0 6 -4 7 11 -2 0 0 3 7 2 8 3 0 4 -1 5

-1 -4 0 -5 1 k=4

4 1 5 0 6

-4 -1 3 -2 0

0 3 7 2 8

1 0 4 -1 5

-3 -4 0 -5 1 k=5

2 1 5 0 6

-4 -1 3 -2 0

Anda mungkin juga menyukai