Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Grafos
Grafos
ESTRUCTURA DE DATOS
Dado un escenario
MATRIZ DE ADYACENCIA
V3
V0
Dado un Grafo G = (V, A) 4 V4 7
10
Sean los Vertices V = {V0, V1,
V5
… Vn} 11
Se pueden representar por V1 6 9 V2
ordinales 0,1,..n
V 0 V1 V 2 V 3 V 4 V 5
Como representar los Arcos?
V 0 0 1 0 0 0 0
Estos son enlaces entre vertices
V 1 1 0
0 1 0 0
Puede usarse una matriz V 2 0 1 0 1 0 0
V 3 0 0 1 0 0 0
1, si hay arco (Vi , Vj )
aij V 4 0 0 0 0 0 1
0, si no hay arco (Vi , Vj ) V 5 0 0 0 0 1 0
EL TIPO DE DATO
#define MAX 20
Los Vertices
typedef int [MAX][MAX] MatrizAdy;
Se definen en un Arreglo typdef Generico[MAX] Vertices;
Los Arcos typedef struct Grafo{
Se definen en una Matriz Vertices V;
MatrizAdy A;
int nvertices;
bool Dirigido;
};
UNIR VERTICE
void Union(Grafo G, int v1, int v2){
G->A[v1][v2] = 1;
if(!G->dirigido)
G->A[v2][v1] = 1;
}
4 7
LISTA DE ADYACENCIA 10
Si una matriz 11
Tiene muchos vertices y 6 9
Pocos arcos
La Matriz de Adyacencia
Tendra demasiados ceros
Ocupara mucho espacio 4 6
Los vertices 6 4 9
Pueden formar una lista, no un vector
9 6 7
Los arcos
Son relaciones entre vertices 7 9
Se pueden representar con una lista x cada
10 11
vertice
11 10
EL TIPO DE DATO
Cada vertice tiene typedef struct Vertice{
Contenido Generico contenido;
Siguiente LSE *LA;
Una lista de adyacencia };
Cada nodo en la lista de typedef Vertice *Arco;
Cola
D
H
R
C
A
B
T H
R
C
A
T T
IMPLEMENTACION
LSE *RecorrerEnAnchura(Grafo G, Vertice V){
LSE *L;
LSE_nodo *sacado, *parco;
Vertice *vsacado, *varco;
Cola Q;
L = malloc(sizeof(LSE));
LSE_Inicializar(L);
Cola_Inicializar(&Q);
V.visitado = TRUE;
EnColar(&Q, LSE_NodoCrear(&V));
while(!Cola_EstaVacia(Q)){
sacado = DesEnColar(&Q);
vsacado = Generico_ObtenerVertice(sacado->G);
LSE_InsertarNodoFin(L, LSE_NodoCrear(vsacado));
for(parco = vsacado->LArcos->header; parco!=NULL; parco = parco->sig){
varco = Generico_ObtenerVertice(parco->G);
if(!varco->visitado){
varco->visitado = TRUE;
EnColar(&Q, LSE_NodoCrear(varco));
}
}
}
return L;
}
RECORRIDO EN
PROFUNDIDAD
Marcar vertice origen V como visitado
Recorrer en Profundidad
Se Muestra:
Cada vertice adyacente de V
D C R H T A B
Que no haya sido visitado
Ejemplo Pila
B
A D
H
T
C H
R
C
A
T D
B
R
EJERCICIO