Professional Documents
Culture Documents
Tema: Grafos
Ejemplo:
• Una red hidráulica,
• Caminos entre ciudades,
• Afinidad entre miembros de un colectivo, entre
otros.
Introducción
Ciudad B
Ciudad A Ciudad D
Ciudad C
Ciudad F
Ciudad E
A A
B B
C C
D D
E E
A Incidencia:
B
• B es incidente al arco (A,B)
C
D • (A,B) es incidente a B
E
Grado de un Vértice
El grado de un vértice n es el número de arcos
incidentes a él.
Sobre el Nodo D:
A B • Grado de Entrada: 3
D • Grado de Salida: 2
C F
• Grado del Nodo: 5
E
Ponderando arcos y vértices
En muchas aplicaciones resulta de interés asignar
valores de ponderación, también llamados pesos,
a los arcos o a los vértices, obteniéndose así:
50 Km
A B
15 Caminos:
m
K
m C 20 K
A-B-C: 70 Km
A-C-B: 35 Km
A B
10 25
C
20
A
B
C
D
A Ejemplo:
B
Ciclo: A,D,C,A
Bucle: A,A
C
D
E
Grafo cíclico y acíclico
Si un grafo contiene al menos un ciclo se llama
cíclico.
A A
B B
C C
D D
E
B A
C
D
A B C D E
0 1 2 3 4
Matriz de Adyacencia
B A A B C D E
0 1 2 3 4
C
D 0 1 2 3 4
0 0 0 1 1 0
E
1 0 0 1 0 0
Matriz de Adyacencia 2 0 0 0 1 1
3 0 0 0 0 1
4 0 0 0 1 0
Implementación en C++
class TVertex
{
private:
void* aInfo;
public:
TVertex(void* pInfo) : aInfo(pInfo){}
void* Info(){return aInfo;}
};
Implementación en C++
class TSeqGraph
{
private:
bool** aAdjacent;
bool aDirected;
int aOrder;
TGSeqList* aVertexList;
public:
TSeqGraph(int, bool);
~TSeqGraph();
TGSeqList* Adjacents(int);
bool AreAdjacents(int, int);
bool Cyclic();
int Degree(int);
… };
Implementación en C++
class TSeqGraph
{
public:
…
bool DeleteEdge(int, int);
bool DeleteVertex(int);
bool Directed() {return aDirected;}
bool Empty(){return aVertexList->Empty();}
bool InsertEdge(int, int);
bool InsertVertex(void*);
bool IsEdge(int, int);
bool IsPathWithLength(int, int, int);
int Order() {return aOrder;}
TGSeqList* VertexList(){return aVertexList;}
};
Problemas
A B C D E E
Representación enlazada de Grafos
Contador de referencia formar parte de la
información de los vértices y mantiene actualizado
la cantidad de arcos llegan a él.