Académique Documents
Professionnel Documents
Culture Documents
APLICACIÓN DE GRAFOS
OBJETIVO
Que el estudiante:
sea capaz de usar la estructura de un grafo para representar los datos de un problema, analizarlos y
aplicar el algoritmo requerido para resolver un problema.
que sea capaz de aplicar el algoritmo de Dijkstra para determinar la ruta más corta de un vértice v
a un vértice w de un grafo con pesos.
INTRODUCCIÓN
Existen muchos problemas que pueden representarse con un grafo. Como aplicación de esta estructura de
datos, grafo, proponemos aplicar el algoritmo de Dijkstra que determina la ruta más corta para llegar de un
vértice v a un vértice w en un grafo.
Un grafo no dirigido es conexo si cada par de vértices están conectados por un camino.
Un grafo con pesos, es un grafo en el cual las aristas tienen pesos. Si la arista e tiene una etiqueta k, se dice
que el peso de e es k.
La longitud de camino, en una gráfica con pesos, es la suma de los pesos de las aristas en el camino.
1
FUNDAMENTOS
En este algoritmo se asignan etiquetas a los vértices. Sea L(v) la etiqueta del vértice v. En cualquier
momento, algunos vértices tienen etiquetas temporales y el resto tienen etiquetas permanentes. Se define
un conjunto T de los vértices que tienen etiquetas temporales. Si v ya tiene una etiqueta permanente L(v),
entonces ésta es la ruta más corta de a a v. En principio todos los vértices tienen etiquetas temporales. Cada
iteración del algoritmo cambia el estado de una etiqueta de temporal a permanente. El algoritmo concluye
cuando z recibe una etiqueta permanente, L(z) representa entonces la longitud de la ruta más corta.
ALGORITMO
Este algoritmo determina la longitud de una ruta más corta del vértice a al vértice z en un grafo conexo con
pesos. El peso de la arista (i,j) es w(i,j) >0 y la etiqueta del vértice x es L(x). Al concluir, L(z) es la ruta más
corta de a a z.
Entrada: Un grafo conexo con pesos, en la cual todos los pesos son positivos. Los vértices a y z.
Salida: L(z), la longitud de una ruta más corta de a a z.
Algoritmo en pseudocódigo:
1. procedimiento dijkstra(w,a,z,L)
2. L(a)= 0
3. para todos los vértices x a hacer
4. L(x)=
5. T = conjunto de todos los vértices //con peso temporal
6. mientras z T hacer {
7. elegir v T con L(v) mínimo
8. T = T – {v}
9. para cada x T adyacentes a v hacer
10. L(x) = minimo(L(x), L(v) + w(v,x)}
11. }
EJEMPLO
2
Inicialmente
L:
a b c d e f
0
L:
a b c d e f
30 0
a b c d e f
61 30 121 49 0
L(d) = min(121,49+18) = 67
3
L:
a b c d e f
61 30 67 49 0
L:
a b c d e f
81 61 30 67 49 0
a b c d e f
T={}
4
METODOLOGÍA
PROGRAMAR
5
if (T[i] !=0)
break;
int minim = L[i];
int v = i;
for (int j = i+1;j<8;j++)
if ((T[j]!=0)&&(L[j]<minim))
{
minim = L[j];
v = j;
}
cout << "Vértice escogido: "<<v<<", L[x] minimo:"<< minim<<endl;
getch();
T[v] = 0;
cout << "Conjunto T:"<<endl;
for (int k = 0; k<8;k++)
cout << " "<<T[k];
cout <<endl;
for (int x=0;x<8;x++)
if (minc[v][x]==1 && T[x]!=0){
cout << "v="<<v<<" x="<<x;
L[x]=min(L[x], L[v]+w[v][x]);
cout <<", L[x]= "<< L[x]<<endl;
getch();
}
}
return L[z];
}
Pruebe el programa.
Documente el programa.
La función dijkstra dada sólo determina la longitud de la ruta más corta, escriba otra una función, o
modifique esta misma para que determine también el camino, la ruta que nos da esa longitud
calculada.
Modifique lo que sea necesario para que los datos de entrada, sean leídos bajo ejecución de
programa y las matrices sean asignadas dinámicamente de acuerdo al número de vértices de cada
problema en particular.
EVALUACIÓN
REPORTAR
[1] Matemáticas Discretas. Johnsonbaugh. Prentice Hall. 4a. Edición. 1999. Capítulo 6..
Estructuras de Datos. Cairó y Guardati. Mc Graw Hill. 2a. Edición. 2002. Capítulo 7.
Matemáticas Discretas. Bases Elementales. Guillén Velasco, García Martínez, Martínez Chávez,
Casarez, Morris y Diez. Editado en el ITCJ. 2003. Teoría de Grafos páginas (54-65).
SUGERENCIAS DIDÁCTICAS