Anda di halaman 1dari 13

FEC

HA
INSTITUTO POLITCNICO NACIONAL
DI ME A
SECRETARIA ACADMICA A S O
DIRECCIN DE EDUCACIN SUPERIOR INGENIERA EN COMPUTACIN
ESIME CULHUACAN

NOMBRE ALUMNO: ASIGNATURA


Apellido paterno
ESTRUCTURAS DE DATOS
Apellido materno Nombre (s)
PROFESOR
No. BOLETA GRUPO M. en C. BEATRIZ EUGENIA CORONA
RAMREZ

PRCTICA No. 17
GRAFOS
1. Objetivo

El alumno resolver problemas de cmputo por medio de la exploracin de grafos.

2. Material y Equipo

Computadora, Compilador C y/o Java y unidad de almacenamiento (USB)

3. Introduccin terica

Conceptos bsicos

Grado de un vrtice: El grado de un vrtice v, escrito como grado(v) es el nmero


de aristas que contiene a v; es decir que tiene a v como extremo. Si grado de v = 0
(v no tiene aristas), se dice que v es un nodo aislado.
Lazo o bucle: Un lazo o bucle es un arista que conecta a un vrtice consigo
mismo, es decir, a=(u,u).
Camino: Un camino P de longitud n se define como la secuencia de n vrtices que
se debe seguir para llegar del vrtice vi (origen) al vrtice vn (destino).
Camino cerrado: El camino P es cerrado si el primer y ltimo vrtices son iguales;
es decir, si vi = vn.
Camino simple: El camino es simple si todos sus nodos son distintos, con
excepcin del primero y del ltimo, que pueden ser iguales; es decir, P es simple si
v1, v2,, . . . son distintos.
Ciclo: Un ciclo es un camino simple cerrado de longitud 3 o mayor. Un ciclo de
longitud k se llama kciclo.
Grfica conexa: Se dice que una grfica es conexa si existe un camino simple
entre cualesquiera dos de sus nodos.
Grfica rbol: Se dice que una grfica G es del tipo rbol o rbol libre si G es una
grfica conexa sin ciclos.
Grfica completa: Se dice que una grfica es completa si cada vrtice v de G es
adyacente a todos los dems vrtices de G. Una grfica completa de n vrtices
tendr n(n1)/2 aristas.
1
Grfica etiquetada: Se dice que una grfica G esta etiquetada si sus aristas tienen
asignado un valor. Es decir, si cada arista a tiene un valor numrico no negativo
c(a), llamado costo, peso o longitud de a, entonces g tiene peso o esta
etiquetada. En este caso, cada camino P de G tendr asociado un peso o longitud
que ser la suma de los pesos de las aristas que forman el camino P.
Multigrfica: Una grfica se denomina multigrfica si al menos dos de sus
vrtices estn conectados entre s por medio de dos aristas. En este caso, las
aristas reciben el nombre de aristas mltiples o paralelas.

Definicin de grafo

En matemticas y ciencias de la computacin, un grafo (del griego grafos: dibujo,


imagen) o grfica es el principal objeto de estudio de la teora de grafos.

Informalmente, un grafo es un conjunto de objetos llamados vrtices o nodos unidos


por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre
elementos de un conjunto.

Tpicamente, un grafo se representa grficamente como un conjunto de puntos


(vrtices o nodos) unidos por lneas (aristas).
Desde un punto de vista prctico, los grafos permiten estudiar las interrelaciones entre
unidades que interactan unas con otras. Por ejemplo, una red de computadoras puede
representarse y estudiarse mediante un grafo, en el cual los vrtices representan
terminales y las aristas representan conexiones (las cuales, a su vez, pueden ser cables
o conexiones inalmbricas).

Prcticamente cualquier problema puede representarse mediante un grafo, y su


estudio trasciende a las diversas reas de las ciencias exactas y las ciencias sociales.

Un grafo G es un par ordenado G = (V,E), donde:


V es un conjunto de vrtices o nodos, y
E es un conjunto de arcos o aristas, que relacionan estos nodos.
Normalmente V suele ser finito. Muchos resultados importantes sobre grafos no son
aplicables para grafos infinitos. Se llama orden de G a su nmero de vrtices, | V | .

Lazos o bucles
Un lazo o bucle es una arista que relaciona al mismo nodo; es decir, una arista donde el
nodo inicial y el nodo final coinciden.

Grafo no dirigido

Un grafo no dirigido o grafo propiamente dicho es un grafo G = (V,E) donde:


es un conjunto de pares no ordenados de
elementos de.

Un par no ordenado es un conjunto de la forma {a,b}, de manera que {a,b} = {b,a}. Para
los grafos, estos conjuntos pertenecen al conjunto potencia de V de cardinalidad 2, el
cual se denota por .

Grafo dirigido

Un grafo dirigido o digrafo es un grafo G = (V,E) donde:

es un conjunto de pares

ordenados de elementos de.


Dada una arista (a,b), a es su nodo inicial y b su nodo final.

Por definicin, los grafos dirigidos no contienen bucles.

Un grafo mixto es aquel que se define con la capacidad de poder contener aristas
dirigidas y no dirigidas. Tanto los grafos dirigidos como los no dirigidos son casos
particulares de este.

Pseudografo

Un pseudografo es un grafo G = (V,E) donde:

es un conjunto de pares no ordenados de


elementos de.
Es decir, un pseudografo es un grafo no dirigido que acepta bucles en .

202
Pseudografo dirigido

Un pseudografo dirigido es un grafo G = (V,E) donde:

es un conjunto de pares ordenados y etiquetados de elementos de Es decir, un

pseudografo dirigido es un grafo dirigido que acepta bucles en .

Variantes sobre las definiciones principales

Algunas aplicaciones requieren extensiones ms generales a las dos propuestas clsicas


de grafos. Aunque la definicin original los permite, segn la aplicacin concreta
pueden ser vlidos o no. A veces V o E pueden ser un multiconjunto, pudiendo haber
ms de una arista entre cada par de vrtices. La palabra grafo (a secas) puede permitir o
no mltiples aristas entre cada par de vrtices, dependiendo del autor de la referencia
consultada. Si se quiere remarcar la inexistencia de mltiples aristas entre cada par de
vrtices (y en el caso no dirigido, excluir bucles) el grafo puede llamarse simple.

Por otra parte, si se quiere asegurar la posibilidad de permitir mltiples aristas, el grafo
puede llamarse multigrado (a veces se utiliza el trmino pseudografo para indicar que
se permiten tanto bucles como mltiples aristas entre cada par de vrtices).

Propiedades

Adyacencia: dos aristas son adyacentes si tienen un vrtice en comn, y dos


vrtices son adyacentes si una arista los une.
Incidencia: una arista es incidente a un vrtice si sta lo une a otro.
Ponderacin: corresponde a una funcin que a cada arista le asocia un valor
(costo, peso, longitud, etc.), para aumentar la expresividad del modelo. Esto se
usa mucho para problemas de optimizacin, como el del vendedor viajero o del
camino ms corto.
Etiquetado: distincin que se hace a los vrtices y/o aristas mediante una marca
que los hace unvocamente distinguibles del resto.

203
Algoritmos de grafos

Algoritmo de Dijkstra

El algoritmo de Dijkstra encuentra el camino ms corto de un vrtice elegido a cualquier


otro vrtice de la digrfica, donde la longitud de un camino es la suma de los pesos de
las aristas que los forman. Las aristas deben tener un peso no negativo.

Una posible aplicacin de este algoritmo se presenta ciando se desea encontrar la ruta
ms corta entre dos ciudades, cada vrtice representa una ciudad y el peso de las
aristas indica la duracin de los vuelos.

A continuacin se describen los principales elementos que se consideran cuando se


aplica el algoritmo.

S es un arreglo formado por los vrtices de los cuales ya conocemos la distancia


mnima entre ellos y le origen. Este arreglo inicialmente, slo almacena el nodo
origen.
D es un arreglo formado por la distancia del vrtice origen a cada uno de los
otros. Es decir D[i] almacena la menor distancia, o costo entre el origen y el
vrtice. A este camino se le conoce como especial. Este arreglo se forma en cada
paso del algoritmo. Al terminar del algoritmo, D contendr la distancia mnima
entre el origen y cada uno de los otros vrtices de la grfica.
M es una matriz de distancias de n x n elementos, tal que M[i,j] almacena la
distancia o costo entre los vrtices i y j, si entre ambos existe una arista. En caso
contrario M[i,j] ser un valor muy grande ( ).

Algoritmo de Floyd

El algoritmo de Floyd, encuentra el camino ms corto entre todos los vrtices de la


digrfica. Sea la grfica dirigida G = (V,A) donde cada arco u v tiene aociado un peso.
El algoritmo de Floyd permitir encontrar el camino ms corto para cada par ordenado
u y v.

La matriz de distancias sirve como punto de partida para este logaritmo. Se realizan k
iteraciones sobre la matriz buscando el camino ms corto; por lo tanto, en la ksima
iteracin, M[i,j] tendr el camino de menor costo para llegar de i a j, pasando por un
nmero de vrtices menor a k, el cual se calcular segn la siguiente expresin:

Mk[i,j]min = Mk1[i,j] o

Mk[i,j]min = Mk1[i,k] + Mk1[k,j]

Se elegir el camino ms corto entre el valor obtenido en la iteracin (k1) y el que


resulta de psasar por el vrtice k. En el algoritmo se usa la matriz de costos, M, donde

204
M[i,j] ser igual al costo de ir de i a j, aun valor muy grande () si no existe camino de i
a j, o cero si i = j.

Algoritmo de Warshall

El algoritmo de Warshall encuentra, si es posible, un camino entre cada uno de los


vrtices de la grfica dirigida. Es decir, la solucin encontrada por el algoritmo no
presenta las distancias entre los vrtices, slo muestra si hay o no camino entre ellos.

El algoritmo de Warshall se basa en un concepto llamado cerradura transitiva de la


matriz de adyacencia. Sea la grfica dirigida G(V,A) y su matriz de adyacencia M, donde
M[i,j]=1 si hay un arco de i a j , y 0 si no lo hay. La cerradura trasnsitiva de M es la matriz c
tal que C[i,j]=1 si hay un camino de longitud mayor o igual que 1 de ii a j, o cero entro
caso. Para generar la matriz C se establece que existe un camino del vrtice i a j que no
pasa por un nmero de vrtices mayor que k si:

a) Ya existe un camino de i a j que no pasa por un nmero de vrtices mayor que k 1.


b)Hay un camino de i a k que no pasa por un nmero de vrtices mayor que k 1 y
hay un camino de k a j que no pasa por un nmero de vrtices mayor que k 1.
4. Desarrollo
Escriba el cdigo en C para desarrollar los algoritmos anteriores.

DIJKSTRA
if (min == HUGE_VAL)
{
cout <<"No Existe\n"; cout <<"\tCoste: \t \n";
}
else
{
i=
destino; i
= ant[i1];
while (i != 1)
{
tmp[cont] = i+1; cont++; i = ant[i]; }
for (i = cont; i > 0; i) { cout<< tmp[i1]<<" > "; }
cout << destino; cout <<"\n\tCoste: " << dist[destino1] <<"\n";
}
delete (dist); delete (ant); delete (tmp); delete (z);
}
void buscar(void)
{
int i, j;
cout <<" Lista de los Menores Caminos en Grafo Dado: \n";
for (i = 1; i <= vertices; i++)
{
for (j = 1; j <= vertices; j+
+) dijkstra(vertices, i,j,
costos); cout<<endl;
}
cout <<"<Presione ENTER para volver al menu principal. \n";
}

int main(int argc, char **argv)


{
int opcion;
do
{
opcion =
menu();
switch(opcion)
{
case 1:
add();
break;
case 2:
buscar();
break;
}
} while (opcion!=
0); delete(costos);
cout<<"\nHasta la
proxima...\n\n"; system("pause");
return 0;
}

209
FLOYD

#include <stdio.h>
#include <stdlib.h>
#include "util.h"
#define N 4 int A[N*N] = {0,1,0,0,0,0,1,1,0,0,0,0,1,0,1,0};
int main(int argc, char **argv)
{
volcarMatriz(A,N);
int a, b;
for (int k = 0; k < N; k++)
{
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
a = A[i*N+k];
b = A[k*N+j];
if ((i != j) && (a * b != 0))
{
if (A[CURR] ==
0) A[CURR] = a +
b;
}
else
A[CURR] = min(A[CURR], a + b);
}
}
}
DBG_LOG("\n");
volcarMatriz(A,N);
return 0;
}
WARSHALL
5. Cuestionario [Trabajo Complementario]

1. Realice el anlisis de eficiencia de cada uno de los mtodos vistos.


En algunos casos nos sivern para hacer bsqueda de datos mas grandes que otras y al igual que
todo se sompara la eficiencia de bsqueda de cada uno,unos todo depende del tipo de bsqueda
que desees realizar.

2. Cree una tabla comparativa de los algoritmos analizados.


Algoritmo de Dijkstra El algoritmo de Floyd Algoritmo de Warshall
El algoritmo de Dijkstra El algoritmo de Warshall encuentra, si
encuentra el camino ms corto El algoritmo de Floyd, encuentra el es posible, un camino entre cada uno
de un vrtice elegido a cualquier camino ms corto entre todos los de los vrtices de la grfica dirigida. Es
otro vrtice de la digrfica, vrtices de la digrfica. Sea la grfica decir, la solucin encontrada por el
donde la longitud de un camino dirigida G = (V,A) donde cada arco u v algoritmo no presenta las distancias
es la suma de los pesos de las tiene aociado un peso. El algoritmo entre los vrtices, slo muestra si hay
aristas que los forman. Las de Floyd permitir encontrar el camino o no camino entre ellos.
aristas deben tener un peso no ms corto para cada par ordenado u
negativo. y v. El algoritmo de Warshall se basa en un
concepto llamado cerradura transitiva
Una posible aplicacin de este La matriz de distancias sirve como de la matriz de adyacencia. Sea la
algoritmo se presenta ciando se punto de partida para este logaritmo. grfica dirigida G(V,A) y su matriz de
desea encontrar la ruta ms Se realizan k iteraciones sobre la adyacencia M, donde M[i,j]=1 si hay un
corta entre dos ciudades, cada matriz buscando el camino ms corto; arco de i a j , y 0 si no lo hay. La
vrtice representa una ciudad y por lo tanto, en la ksima iteracin, cerradura trasnsitiva de M es la matriz
el peso de las aristas indica la M[i,j] tendr el camino de menor costo c tal que C[i,j]=1 si hay un camino de
duracin de los vuelos. para llegar de i a j, pasando por un longitud mayor o igual que 1 de ii a j, o
nmero de vrtices menor a k cero entro caso.

Anda mungkin juga menyukai