Explora Libros electrónicos
Categorías
Explora Audiolibros
Categorías
Explora Revistas
Categorías
Explora Documentos
Categorías
LABORATORIO NRO. 12
GRAFOS
1. OBJETIVOS DE LABORATORIO
1.1. Utilizar la estructura de datos no lineal grafos para almacenar y recuperar elementos.
1.2. Implementar el grafo con matriz de adyacencia y listas de adyacencia.
1.3. Implementar las operaciones básicas del grafo.
2. REVISIÓN TEÓRICA
2.1. Grafo
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
La elección de una representación u otra depende del tipo de grafo y de las operaciones
que se vayan a realizar sobre los vértices y arcos. Para un grafo denso lo mejor es
utilizar una matriz de adyacencia. Para un grafo disperso, se suelen utilizar listas de
adyacencia que se ajustan al número de arcos.
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
2.5.1. Matriz de adyacencia
Sea G = (V, A) un grafo de n nodos, siendo V = {v0, v1, …, vn-1} el conjunto de nodos,
y A = {(vi, vj)} el conjunto de arcos. Los nodos están numerados consecutivamente de 0
a n-1. La representación de los arcos se hace con una matriz A de nxn elementos,
denominada matriz de adyacencia, tal que todo elemento aij puede tomar los valores:
Importante: Una matriz de adyacencia se usa para un grafo denso (tiene la mayoría de
los arcos posibles).
Para grafos dispersos, la matriz de adyacencia ocupa el mismo espacio que si el grafo
tuviera muchos arcos (grafo denso). Cuando ocurre esto, se elige la representación del
grafo con listas enlazadas, denominadas listas de adyacencia.
Las listas de adyacencia son una estructura multienlazada formada por una tabla
directorio en la que cada elemento representa un vértice del grafo, del cual emerge una
lista enlazada con todos sus vértices adyacentes. Es decir, cada lista representa los arcos
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
con el vértice origen del nodo de la lista directorio, por eso se llama lista de adyacencia.
3. DESARROLLO DE LABORATORIO
En este apartado vamos a implementar el grafo con matriz de adyacencia y con listas de
adyacencia, para ello creamos un nuevo proyecto llamado Laboratorio12.
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
que se va a utilizar en la matriz de adyacencia y listas de adyacencia. Por lo tanto, debe
ser creada en un paquete llamado Commons.
// Atributos de la clase
private int idCiudad;
private String nombre;
private int numHabitantes;
// Constructor vacio
public Ciudad() {
}
// Método toString
@Override
public String toString() {
return "Ciudad{" + "idCiudad=" + idCiudad + ",
nombre=" + nombre + ", numHabitantes=" + numHabitantes + '}';
}
La clase Vertice representa un nodo del grafo, y tiene las siguientes propiedades:
El constructor inicializa el valor y pone como número de vértice -1; el método que
añade el vértice al grafo establece el número que le corresponda.
// Operaciones
}
En la clase Vertice, cree el método equals(), este método comprueba si dos vértices son
iguales:
En la clase Vertice, cree el método toString(), este método devuelve las características
del vértice:
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
// Operaciones
En la clase GrafoMatriz, cree el método vertices(), este método devuelve los vértices
del grafo:
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
En la clase GrafoMatriz, cree el método nuevoVertice(), este método añade un nuevo
vértice al grafo:
En la clase GrafoMatriz, cree el método nuevoArco, este método añade un nuevo arco
a partir de los nombres de vértice:
/**
*
* @author fbarrientos
*/
public class PruebaGrafoMatriz {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
// Número de nodos (vértices)
int n = 4;
}
Explique la salida:
La clase VerticeLista representa un nodo del grafo, y tiene las siguientes propiedades:
Tipo valor;
int numVertice;
Lista lad;
public VerticeLista(Tipo v) {
valor = v;
numVertice = -1;
lad = new Lista();
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
}
@Override
public String toString() {
return valor + " (" + numVertice + ")";
}
int destino;
double peso;
public Arco(int d) {
destino = d;
}
La clase GrafoLista define la tabla de vértices con sus respectivas listas de adyacencia.
Además, implementa las operaciones básicas para crear un grafo: añadir un vértice,
insertar un arco, dar de baja un vértice y sus arcos, etc.
int numVerts;
static int maxVerts = 20;
VerticeLista[] tablAdc;
public GrafoLista() {
this(maxVerts);
}
//
boolean adyacente(Tipo a, Tipo b) throws Exception {
int va, vb;
va = numVertice(a);
vb = numVertice(b);
if (va < 0 || vb < 0) {
throw new Exception("Vértice no existe");
}
if (tablAdc[va].lad.buscarLista(new Arco(vb)) != null)
{
return true;
} else {
return false;
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws Exception {
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
int n = 4;
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa
UNIVERSIDAD NACIONAL DE SAN CRISTÓBAL DE HUAMANGA
ESCUELA PROFESIONAL DE INGENIERÍA DE SISTEMAS
ESTRUCTURA DE DATOS (IS-241)
3.3. Reto
Diseñe las GUI’s para probar las operaciones básicas de grafos implementadas con
Matriz de adyacencia y Listas de adyacencia (listas enlazadas).
GitHub: https://github.com/fredybarrientos/LAB.-IS241-ESTRUCTURA-DE-DATOS-
2020-I.git
Docentes:
Ing. Jennifer Rocío Pillaca De La Cruz
Ing. Fredy Barrientos
Ing. Alberto Lapa