Вы находитесь на странице: 1из 56

Definiciones y estructuras

Camino mnimo

Arbol
generador mnimo
Problemas

Problemas y algoritmos sobre Grafos


Problemas, Algoritmos y Programacion
1er Cuatrimestre de 2010

13 de Abril de 2010
Alejandro Deymonnaz

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Menu del da
1

Definiciones y estructuras
Grafos

Arboles
Camino mnimo
Breadth-first search (BFS)
Dijkstra
Bellman-Ford
Floyd-Warshall

Arbol generador mnimo


Prim
Kruskal
Problemas
Cantidad de caminos
Problemas en grafos implcitos
Problemas
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Estructura de datos

Repaso de estructuras de datos:


Grafo

Arbol

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos
Un grafo se define como la pareja (V , E ), de vertices (o nodos, o
puntitos) y ejes (o aristas, o rayitas, o flechitas), donde
E V V.
Se usan para modelar muchos problemas que involucran puntitos y
rayitas.
Se describen de alguna(s) de estas formas:
Por las adyacencias de cada vertice
Por la definicion: el conjunto de vertices y el conjunto de ejes.
Implcitamente, por otra estructura.
En adelante, n es la cantidad de vertices (|V |) y m es la cantidad
de aristas (|E |).

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos - tipos
Hay muchas variantes de grafos:
Dirigidos: (u, v ) y (v , u) son aristas distintas.
No dirigidos: (u, v ) y (v , u) son la misma arista.
Multi-grafos: Puede haber varias aristas entre la misma pareja
ordenada.
Hay muchas propiedades sobre grafos:
Con o sin ciclos (dirigidos o no dirigidos)
Conexos o no conexos.
Completos, vacos, triviales.
Hamiltonianos, euclideanos, cactus, etc.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos - definiciones

El vecindario de un vertice u, N(u), es el conjunto de vertices


x tales que (u, x) es una arista del grafo.
El grado de un vertice u, d(u), es el cardinal de su vecindario.
En un digrafo esto es el grado de salida de u.
Un camino en un grafo es una secuencia de aristas donde el
extremo final de una arista es el inicial de la siguiente arista.
Un ciclo en un grafo es un camino que empieza y termina en
el mismo vertice.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos - por adyacencia

De cada vertice se describe su conjunto de vecinos:


Como una lista de vecinos (lista de adyacencia).
Como un conjunto, arreglo u otro contenedor.
Como un conjunto sobre bits (matriz de adyacencia).
Recorrer los vecinos de un vertices es recorrer los elementos del
contenedor.
Recorrer todas las aristas es recorrer todos los vecinos de todos los
vertices.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos - por adyacencia

Costo de las operaciones seg


un la representaci
on:
Operacion
Lista de adyacencia Matriz de adyacencia
(u, v ) E ? O(min(d(u), d(v )))
O(1)
Recorrer N(u)
O(d(u))
O(n)
O(n + m)
O(n2 )
Recorrer E
Memoria
n + 2m
n2

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos - por adyacencia


Por lista de adyacencia se puede almacenar de la siguiente forma:
vvint lady(n, vint());
#define agregar(u, v) \
{ lady[u].push_back(v); lady[v].push_back(u); }

Por matriz de adyacencia se puede almacenar de la siguiente forma:


vvint mady(n, vint(n, 0));
#define agregar(u, v) \
{ mady[u][v]++; mady[v][u]++; }

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Grafos - por definicion


Se describe el conjunto de aristas (E ) involucradas en el grafo.
Se describe el conjunto de vertices (V ). A veces alcanza con
un n
umero (n).
Ejemplo:
struct eje { int a, b; };
vector<eje> g;
int n;
#define agregar(u, v) \
{ g.push_back( (eje){ a: (u), b: (v) } ); }

Algunas representaciones son mas apropiadas para ciertos


algoritmos.
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Arboles

Arbol
Un arbol es un grafo conexo y sin ciclos.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Arboles

Arbol
Un arbol es un grafo conexo y sin ciclos.
La definicion solo sirve para demostrar propiedades teoricas.
Un arbol se puede representar igual que un grafo (caso
particular).
Un vertice con solo un vecino se llama hoja.
Algunas propiedades:
Hay un u
nico camino entre todo par de vertices.
m =n1
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Grafos

Arboles

Arboles
con raz (rooted trees)

Arbol
con raz
Un arbol con raz es un arbol con un vertice distinguido, llamado
raz.
Tambien se puede representar como un grafo (y un vertice
distinguido).
Tienen la nocion de padre e hijo, de acuerdo a la cercana a la
raz.
Admiten una representaci
on recursiva: Un arbol es
una raz
un conjunto de sub-arboles, hijos de esa raz

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Camino mnimo
Problema de Camino mnimo
Dado un grafo G con pesos en las aristas, el problema de camino
mnimo entre dos nodos u y v consiste en encontrar un camino
entre esos nodos cuyo peso sea menor o igual que el peso de
cualquier otro camino entre u y v .
Hay variantes:
Se puede calcular el camino mnimo entre todo par de nodos.
El peso de un camino puede ser la suma de los pesos
individuales, el producto, el mayor, etc.
El grafo puede ser dirigido o no dirigido.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Lmites del problema

El camino mnimo se define como un camino simple.


En muchos casos, mnimo implica simple.
Si hay un ciclo de peso negativo alcanzable, el problema se
indefine (no acotado).
Camino maximo simple es muy difcil (NP-Completo).

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Algoritmo
BFS
Breadth-first search (BFS) o b
usqueda en ancho es un algoritmo
para recorrer los nodos de un grafo en un orden especfico.
Comienza por un vertice distinguido
Por cada vertice visitado, marca en una cola todos sus vecinos
no marcados.
Visita los vertices en el orden determinado por la cola.
En total, recorre a lo sumo una vez cada vertice.
En total, recorre a lo sumo dos veces cada arista.
Complejidad: O(n + m).
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Algorithm 2.1: bfs(Grafo g , Nodo v )


marcadosp FALSE p V (g )
cola nueva cola
marcar (v )
while
cola.empty ()
p cola.pop()

for each
 q g .vecinos(p)
do
if marcadosq

do
then marcar (q)
Algorithm 2.2: marcar(Nodo v )
marcadosv TRUE
cola.push(v )
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Arbol
de BFS
El recorrido BFS determina un arbol con raz.
Cada vez que se marca un vecino se usa esa arista para el
arbol.
1

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Extendiendo BFS

BFS guarda un bit de informaci


on por cada nodo.
Se puede extender y guardar mas informaci
on.
Distancia desde la raz (en el arbol de BFS)
Cualquier dato asociado al recorrido (ej: vengo de)

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Algorithm 2.3: bfs-dist(Grafo g , Nodo v )


distp p V (g )
cola nueva cola
marcar (v , 0)
while
cola.empty ()
p cola.pop()

d distp
do for each
 q g .vecinos(p)

if distq =

do
then marcar (q, d + 1)
Algorithm 2.4: marcar(Nodo v , Dist d)
distv d
cola.push(v )
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Problema - Is it a tree

Problema SPOJ: 1436 - Is it a tree http://www.spoj.pl/problems/PT07Y/.


Dado un grafo, determinar si es ademas un arbol.
Por definicion, un arbol es un grafo:
Conexo
Sin ciclos

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

BFS - Camino mnimo

Hecho: Distancia entre adyacentes


Sea distv la distancia calculada por BFS en un grafo G desde el
vertice inicial v0 hasta el vertice v . Si (u, v ) E (G ) entonces
|distu distv | 6 1.
Teorema: Camino mnimo
En un grafo conexo el arbol de BFS es un arbol de caminos
mnimos desde el vertice inicial del BFS.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

BFS - Invariante
Invariantes y propiedades del algoritmo:
Hay tres estados disjuntos para los vertices:
No marcado
Marcado, pero no visitado
Marcado y visitado

Solo los vertices marcados pero no visitados estan en la cola


Todos los vecinos de los vertices visitados estan marcados
De todos los vertices marcados ya se conoce con certeza la
distancia mnima al inicio.
La distancia para los vertices en la cola es d o d + 1 (delante
estan todos los de d y luego los de d + 1), para alg
un valor d.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

BFS - Grafos no conexos

BFS recorre todos los vertices alcanzables desde el vertice


incial (componente conexa).
Recorrer todas las componentes conexas requiere correr un
BFS en cada componente.
Hay O(n) componentes y BFS tarda O(n + m).
Recorrer todas las componentes podra tardar O(n (n + m))?

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Algorithm 2.5: bfs-all(Grafo g )


marcadosp FALSE p V (g )
cola nueva cola
for each v g .nodos
do if marcados
v

marcar
(v
)

while
cola.empty
()

cola.pop()

then

for each

 q g .vecinos(p)
do

if marcadosq

do
then marcar (q)
Algorithm 2.6: marcar(Nodo v )
marcadosv TRUE
cola.push(v )

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

BFS - Camino mnimo - Resumen

Condiciones particulares:
Grafo dirigido
Todos los pesos iguales y positivos
Camino mnimo
El camino mnimo de un nodo u a todos los demas se puede
resolver con un BFS desde u.
Complejidad: O(n + m)

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Dijkstra
Condiciones particulares:
Grafo dirigido
Los pesos pueden ser distintos pero deben ser no negativos.
Algoritmo:
Al igual que en BFS, Dijkstra recorre los nodos en el orden de
distancia al origen.
El siguiente nodo a visitar lo elige como el mas cernano al
origen (no visitado anteriormente).
Al visitar un nodo actualiza (marca) sus vecinos.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Dijkstra
Hay dos clases de implementaciones:
Guardando la lista de distancias en un array
Mnimo: O(n)
Actualizaci
on: O(1)

Guardando la lista de distancias en un heap o arbol binario de


b
usqueda (ej: conjunto)
Mnimo: O(log(n))
Actualizaci
on: O(log(n))

Hay n consultas de mnimo y m actualizaciones.


Complejidad: O(n2 ) o O((n + m) log(n)).

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Algorithm 2.7: dijkstra(Grafo g , Nodo v )


distp p V (g )
vistop FALSE p V (g )
distv 0
while
j, vistoj
p argminvistoj {distj }

vistop TRUE
do for each
 q g .vecinos(p)

if distq > distp + costop,q

do
then distq distp + costop,q

distp puede ser un array (b


usqueda lineal), o un set<dist,nodo>
(b
usqueda binaria).
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Dijkstra - Invariante
Invariantes y propiedades del algoritmo:
Hay tres estados disjuntos para los vertices:
no marcado No se conoce ning
un camino.
marcado Se conoce alg
un camino tentativo.
visitado Se conoce un camino mnimo con certeza.
Nota: El primer grupo se puede incorporar al segundo grupo como si
tuvieran un camino de longitud .

De todos los vecinos de los vertices visitados se conoce alg


un
camino.
De todos los vertices visitados ya se conoce con certeza la
distancia mnima al inicio.
La distancia para los vertices de los que no se tiene certeza
que la distancia conocida es
optima es mayor que para los que
s se tiene esa certeza.
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Dijkstra - Explicacion

Argumento principal de la demostraci


on:
Argumento
El vertice con distancia tentativa menor no puede ser mejorado por
ninguno de los demas vertices no visitados.
Ese argumento usa fuertemente que las aristas son no negativas.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Bellman-Ford

Condiciones particulares:
Grafo dirigido
Los pesos pueden ser negativos
No puede haber ciclos negativos, aunque los detecta
Complejidad: O(n m).
Calcula la distancia de un vertice hacia todos los demas vertices.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Algorithm 2.8: bellman-ford(Grafo g , Nodo v )


p V (g )
0
=
1 to0 n
dist dist
do for each
 (p, q) g .aristas() 0

do distq min(distq , distp + costop,q )

distp
distv
for i

Si en una iteracion de i no se actualiza ning


un valor de dist,
entonces se puede detener el algoritmo.
Si en vez de distp0 se usa siempre distp el algoritmo evoluciona
potencialmente mas rapido.
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Bellman-Ford - Invariante

Al finalizar la itearcion i:
distu tiene la distancia del camino mas corto de v hasta u que
usa i o menos aristas.
Propiedades
Al finalizar, distu tiene la distancia mnima entre v y u que
usa n o menos aristas.
Si se itera n + 1 veces y se mejora dist a
un en la u
ltima
iteracion, entonces hay un ciclo negativo.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Floyd-Warshall

Condiciones particulares:
Grafo dirigido
Los pesos pueden ser negativos
Puede haber ciclos negativos (alcanzables o no).
Complejidad: O(n3 ).
Calcula la distancia de todos los vertices hacia todos los vertices.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Floyd-Warshall - Codigo

La implementacion del algoritmo es muy simple.


vvint dist(n, vint(n, INF)); /* Matriz de distancia */
... /* cargo la matriz de distancias */
forn(k, n) forn(i, n) forn(j, n) {
dist[i][j] = min(dist[i][j], dist[i][k] + dist[k][j]);
}

min es la operacion de minimizaci


on del problema.
+ es la operacion asociativa del peso entre dos aristas.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Floyd-Warshall - Invariante

Al finalizar la iteracion k del ciclo exterior:


La matriz disti,j tiene la mnima distancia del camino de i a j
que usa vertices intermedios en el conjunto {1, . . . , k}
Propiedades:
El camino mnimo (si existe y es acotado) entre i y j no
utiliza dos veces el mismo vertice.
Al finalizar, v esta en un ciclo negativo si y s
olo si distv ,v < 0.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

Floyd-Warshall - Problemas

Algunuos problemas
ACM-ICPC UVA - 4299 - FRandomly-priced Tickets http://acmicpc-live-archive.uva.es/nuevoportal/
data/problem.php?p=4299
Calcular la clausura transitiva de una relaci
on.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

BFS con muchas colas

BFS no funciona cuando hay distintos pesos.


Por qu
e? El orden BFS no es el mismo que el orden de distancia
al origen.
Soluci
on:
Generar el mismo orden de distancia al origen usando varias colas.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Breadth-first search (BFS)


Dijkstra
Bellman-Ford
Floyd-Warshall

BFS con muchas colas


Condiciones particulares:
Grafo dirigido
Los pesos deben ser enteros no negativos y acotados por W .
Algoritmo:
Se tienen max(distp ) + 1 colas, una para cada distancia.
Marcar un nodo con distancia d implica colocarlo en la cola d.
Las colas se van vaciando en orden creciente.
Si los pesos estan acotados por W , s
olo habra a lo sumo
W + 1 colas no vacas.
Complejidad: O(n + m + max(distp )).

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Prim
Kruskal

Arbol
generador mnimo

Definicion
Dado un grafo G conexo con pesos en las aristas, un arbol
generador mnimo es un subgrafo de G que es un arbol de |V (G )|
vertices, cuya suma de pesos es la menor posible.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Prim
Kruskal

Algorithm 3.1: prim(Grafo g , Nodo v )


T
distp p V (g )
vistop FALSE p V (g )
distv 0
while j, vistoj

p argminvistoj {distj }

vistop TRUE

T T {(desdep , p)} (salvo la primera vez)


do for each
q g .vecinos(p)

if distq >

 costop,q

distq costop,q
do

then
desdeq p
v es cualquier vertice inicial.
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Prim
Kruskal

Prim
Hay dos clases de implementaciones:
Guardando la lista de distancias en un array
Mnimo: O(n)
Actualizaci
on: O(1)

Guardando la lista de distancias en un heap o arbol binario de


b
usqueda (ej: conjunto)
Mnimo: O(log(n))
Actualizaci
on: O(log(n))

Hay n consultas de mnimo y m actualizaciones.


Complejidad: O(n2 ) o O((n + m) log(n)).

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Prim
Kruskal

Kruskal
Algorithm 3.2: kruskal(Grafo g , Nodo v )
T
ordenar g .aristas segun costop,q de menor a mayor
for each
 (p, q) g .aristas
if T {(p, q)} es sin ciclo
do
then T T {(p, q)}
return (T )
Es conveniente representar G por definici
on (lista de aristas).
T {(p, q)} es sin ciclo puede ser costoso de implementar.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Prim
Kruskal

Union-find
Defincion
Union-find es una estructura de datos que representa una particion
de un conjunto de n elementos, con las siguientes operaciones:
unir (u, v ): Une el conjunto donde esta u con el de v .
id(u): Devuelve el identificador del conjunto donde esta u.
Hay varias implementaciones que difieren en la complejidad:
Lista de ids. Consulta en O(1), junta en O(n).
Lista de ids y lista de elementos por cada id (la inversa).
Consulta en O(1), junta u y v en
O(min(|conj(u)|, |conj(v )|)), o bien, O(log (n)) amortizado.
Lista de puntero al padre. Consulta en O(n), junta en O(1).
Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Prim
Kruskal

Kruskal - Union-find

Algorithm 3.3: kruskal(Grafo g , Nodo v )


T
ordenar g .aristas segun costop,q de menor a mayor
for each
(p, q) g .aristas
6= id(q)
if id(p) 
T T {(p, q)}
do
then
unir (p, q)
return (T )
Complejidad total: O(m log (m))

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Cantidad de caminos

Problema
Dado un grafo dirigido G , De cuantas formas se puede ir de u a v
usando k o menos aristas?

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Cantidad de caminos

Problema
Dado un grafo dirigido G , De cuantas formas se puede ir de u a v
usando k o menos aristas?
Caso particular:
De cuantas formas se puede ir de u a v usando una arista?

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Cantidad de caminos

Sea A la matriz de adyacencia de G ,


Ak dice de cuantas forma se puede ir de i a j usando
exactamente k aristas.
Pk
i
i=1 A resuelve el problema.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Cantidad de caminos

Sea A la matriz de adyacencia de G ,


Ak dice de cuantas forma se puede ir de i a j usando
exactamente k aristas.
Pk
i
i=1 A resuelve el problema.
P
Pk1 i
i
k
Prop: 2k1
i=0 A = (A + I )
i=0 A
Se puede resolver con Divide & Conquer o programacion dinamica.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Problema - Laberinto
Fausto se encuentra atrapado en un laberinto
(como el de la Figura 1). Se pide calcular la
menor cantidad de movimientos (Norte, Sur,
Este u Oeste) necesarios para que Fausto
alcance la salida (marcada con o) dado que
inicialmente se encuentra en el punto marcado
con *.

#######
#....o#
#.#####
#.#...#
#...#*#
#######
(Figura 1)

Descripcion: # es una pared, . es un espacio libre, o es la


salida y * es el punto donde estamos parados.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Problema - Laberinto

Fausto puede estar en cualquiera de las casillas (estado).


Estando en algunas casillas es posible alcanzar otras con un
movimiento (transici
on de estados).
Estos dos conceptos definen un grafo.
La cantidad mnima de movimientos para escapar se traduce a
un camino mnimo en el grafo.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Problema - Laberinto

Representacion del grafo, en un tablero de r c.


V (G ) = [0, r ) [0, c)
(u, v ) E (G ) libre(u) libre(v ) dist(u, v ) == 1
Un nodo v se representa con dos enteros i, j.
El grafo se representa con dos enteros (r y c) y un mapa de
casillas libres.
int r, c;
char mapa[MAX_R][MAX_C];

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Problema - Laberinto
Vecinos de un nodo i, j:
const int ddi[4] = {-1, 1, 0, 0};
const int ddj[4] = { 0, 0, -1, 1};
forn(d, 4) {
int ii=i+ddi[d];
int jj=j+ddj[d];
if (enrango(ii, jj) && mapa[ii][jj] != #) {
/* ii,jj es vecino */
}
}

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Problema

Google Code Jam 2009 - Qualification Round - Problema B: http:


//code.google.com/codejam/contest/dashboard?c=90101
V (G ) = [0, H) [0, W )
Un nodo v se representa con dos enteros i, j.
Cada nodo tiene a lo sumo un vecino donde vierte el agua
(seg
un las reglas del problema).
Cada nodo tiene a lo sumo cuatro vecinos que vierten agua en
el.
Se desea identificar las componentes conexas de ese grafo.

Sabi

Grafos

Definiciones y estructuras
Camino mnimo

Arbol
generador mnimo
Problemas

Cantidad de caminos
Problemas en grafos implcitos
Problemas

Problemas de hoy
SPOJ Brasil - 1759 - FFO Cubo http://br.spoj.pl/problems/CUBO/ (Dijkstra)
ACM-ICPC UVA - 3985 - Board Games http://acmicpc-live-archive.uva.es/nuevoportal/
data/problem.php?p=3985 (Floyd)
ACM-ICPC UVA - 4299 - Randomly-priced Tickets http://acmicpc-live-archive.uva.es/nuevoportal/
data/problem.php?p=4299 (Floyd)
ACM-ICPC UVA - 3652 - Lazy Jumping Frog http://acmicpc-live-archive.uva.es/nuevoportal/
data/problem.php?p=3652 (BFS por pisos)

Sabi

Grafos

Вам также может понравиться