















Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Asignatura: Adam Smith, Profesor: , Carrera: Administración y Dirección de Empresas, Universidad: URJC
Tipo: Apuntes
1 / 23
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!
















1
Definiciones
Con los árboles se modelan jerarquías.
Ejemplos: caminos entre ciudades, redes de ordenadores, tráfico urbano, optimización de viajes, planificación de tareas,…
Alcorcón Leganés
Fuenlabrada
Móstoles Getafe
3
Definiciones
Grafo: G = (V, A) V: conjunto finito, no vacío, de vértices ( nodos) A: conjunto de pares de elementos de V , denominados aristas. ( arcos )
Definiciones
Grafo dirigido o Digrafo : Cuando los arcos son ordenados (v1,v2) != (v2,v1), <v1,v2>.
Grafo valorado o ponderado : Grafo cuyos arcos tienen asociados un peso o coste. A
B M
C Y R G
3 5
11 3 8 1
7
Definiciones
Ciclo o bucle : posible camino de “v” a “v” (A, B, Y, R, A)
Camino simple : camino con vértices diferentes
A
B M
C Y R G
Definiciones
Grafo completo : si existe una arista entre cada par de vértices
v2 v
v
v1 (^) v
v2 v
v
9
Definiciones
Grafo conexo : Para grafo no dirigido si existe un camino desde un vértice a cualquier otro. Para grafo dirigido si existe una cadena de arcos que une cualquier par de vértices.
B A
R
Y
C
v2 v
v
v1 (^) v
Definiciones
Grafo fuertemente conexo : si, para un grafo dirigido, existe un camino desde un vértice a cualquier otro.
Un grafo dirigido puede ser conexo (si lo es sin considerarlo dirigido) o fuertemente conexo.
v2 v
v
v1 (^) v
13
Especificación formal
Tipo : Grafo (elemento) Sintaxis : CREARGRAFOVACIO → Grafo ESGRAFOVACIO (Grafo)→ Booleano INSERTANODO(vertice, Grafo) → Grafo INSERTARARISTA(vertice, vertice, Grafo) → Grafo BORRARNODO(vertice, Grafo) → Grafo BORRARARISTA(vertice, vertice, Grafo) → Grafo ESTA-VERTICE(vertice, Grafo) → Booleano ESTA-ARISTA(vertice, vertice, Grafo) → Booleano ADYACENTES(vertice, Grafo) → conjunto[vertice] Semántica : ∀ G ∈ Grafo, ∀ n ∈ Vertice: ESVACIO (CREARGRAFOVACIO) ⇒ cierto … EL-VERTICE (CREARGRAFOVACIO) ⇒ error EL-ARISTA (CREARGRAFOVACIO) ⇒ error
Realización en Pascal
UNIT grafosM; {Definición de Grafo no ponderado con matriz de adyacencia} INTERFACE USES ...; CONST MAX_NUM = ...; TYPE TipoInfo = ...;{Se puede importar de otra unidad} TipoIndice = 1..MAX_NUM; TipoNodos = ARRAY[TipoIndice] OF TipoInfo; TipoMatriz = ARRAY[TipoIndice, TipoIndice] OF BOOLEAN; TipoGrafo = RECORD matriz: TipoMatriz; nodos: TipoNodos; num_nodos: 0..MAX_NUM; END;
15
Realización en Pascal
PROCEDURE crearGrafoVacio(VAR g:TipoGrafo); {Construye un grafo inicial sin nodos ni arcos} FUNCTION EsGrafoVacio(g: TipoGrafo):BOOLEAN; {Nos dice si el grafo es vacío o no} FUNCTION EstaVertice(n:TipoIndice; g:TipoGrafo):BOOLEAN; {Nos dice si el nodo n pertenece al grafo} FUNCTION EstaArista(o,d:TipoIndice; g:TipoGrafo):BOOLEAN; {Nos dice si existe arista entre los nodos o y d} PROCEDURE InsertaNodo(n:TipoInfo; VAR g:TipoGrafo); {Inserta el nodo n} PROCEDURE InsertaArista(o,d:TipoIndice; VAR g: TipoGrafo); {Inserta el arco entre o y d} PROCEDURE BorrarNodo(n: TipoIndice; VAR TipoGrafo); {Elimina el nodo n y todas sus aristas} PROCEDURE BorraArista(o,d: TipoIndice;VAR g:TipoGrafo); {Elimina la arista existente entre los nodos o y d}
Realización en Pascal
PROCEDURE crearGrafoVacio(VAR g:TipoGrafo); (* Construye un grafo inicial sin nodos ni arcos *) VAR i,j: tipoIndice; BEGIN g.numnodos:= 0; FOR i:= 1 TO MAX_NUM DO BEGIN g.nodos[i]:= InfoVacia;{operación de TipoInfo} FOR j:= 1 TO MAX_NUM DO g.matriz[i,j] := FALSE; END; END;
FUNCTION EsGrafoVacio(g: TipoGrafo):BOOLEAN; {Nos dice si el grafo es vacío o no} BEGIN EsVacio := (g.numnodos = 0); END;
19
Realización en Pascal
PROCEDURE InsertaArista(o,d:TipoIndice; VAR g: TipoGrafo); (* Inserta el arco entre o y d *) BEGIN IF EstaVertice(o,g) AND EstaVertice(d,g) THEN BEGIN g.matriz[o,d]:= TRUE; g.matriz[d,o]:= TRUE END END;
Realización en Pascal
PROCEDURE BorrarNodo(n: TipoIndice; VAR TipoGrafo); (* Elimina el nodo n y todas sus aristas *) VAR i, j: 1..succ(MAX_NUM); BEGIN IF EstaVertice(n,g) THEN BEGIN FOR i:= succ(n) TO g.numnodos DO g.nodos[pred(i)]:= g.nodos[i]; FOR j:= 1 TO g.numnodos DO FOR i:= succ(n) TO g.numnodos DO BEGIN g.matriz[j, pred(i)]:= g.matriz[j,i]; g.matriz[pred(i),j]:= g.matriz[i,j]; END; g.numnodos:= pred(g.numnodos) END END;
21
Realización en Pascal
PROCEDURE BorraArista(o,d: TipoIndice;VAR g:TipoGrafo); (* Elimina la arista existente entre los nodos o y d *) VAR i,j:1..MAXNUM; BEGIN IF EstaArista(o,d) THEN BEGIN g.matriz[o,d] := FALSE; g.matriz[d,o] := FALSE END END;
25
Recorrido en Profundidad
PROCEDURE RecorreProfundidad (g: grafo); VAR i: TipoIndice; marca: Tipovisitado; BEGIN FOR i:= 1 TO g.numnodos DO marca[i]:= FALSE; FOR i:= 1 TO g.numnodos DO IF NOT marca[i] THEN rp(g, i, marca) END; PROCEDURE rp(g: grafo; n: TipoIndice; VAR marca: TipoVisitado); {El nodo n no ha sido visitado anteriormente} VAR i: TipoIndice; BEGIN marca[n]:= TRUE; FOR i:= 1 TO g.numnodos DO IF EstaArista(n,i) AND NOT marca[i] THEN rp(g, marca, i) END;
Recorrido en Profundidad
27
Recorrido en Profundidad
Adyacentes a 1: 2, 4, 8
Recorrido: 1, 2
Recorrido en Profundidad
Adyacentes a 2: 1, 3, 4
Recorrido: 1, 2, 3
31
Recorrido en Profundidad
Adyacentes a 7: 4, 6, 9
Recorrido: 1, 2, 3, 4, 7, 6
Recorrido en Profundidad
Adyacentes a 6: 5, 7
Recorrido: 1, 2, 3, 4, 7, 6, 5
33
Recorrido en Profundidad
Adyacentes a 5: 3, 6
Recorrido: 1, 2, 3, 4, 7, 6, 5
Recorrido en Profundidad
Adyacentes a 6: 5, 7
Recorrido: 1, 2, 3, 4, 7, 6, 5
37
Recorrido en Anchura
PROCEDURE RecorridoAnchura(g: TipoGrafo); VAR n: TipoIndice; marca: TipoVisitado; BEGIN FOR n:= 1 TO g.numnodos DO marca[n] := FALSE; FOR n:= 1 TO g.numnodos DO IF NOT marca[n] THEN ra(n) END;
39
Recorrido en Anchura
PROCEDURE ra(g:TipoGrafo; n:TipoIndice; VAR marca:TipoVisitado); VAR q: TipoCola; w,i: TipoIndice; BEGIN colaVacia(q); marca[n]:= TRUE; encolar(q,n); WHILE NOT esVacia(q) DO BEGIN frente (q, w); quitar(q); FOR i:= 1 TO g.numnodos DO IF EstaArista(w,i) AND NOT marca[i] THEN BEGIN marca[i]:= TRUE; encolar(q,i) END END END;
Recorrido en Anchura
Adyacentes a 1: 2, 4, 8
Recorrido: 1, 2, 4, 8