0% encontró este documento útil (0 votos)
43 vistas3 páginas

Transformación de Grafo: Matriz a Lista

El documento describe cómo transformar un grafo representado con matriz de adyacencia a uno representado con lista de adyacencia. Se implementa un método Transformar en la clase GrafoMatriz que crea un nuevo grafo GrafoLista copiando los nodos y aristas del grafo original. También se implementan los métodos necesarios en las clases GrafoLista, NodoLista y ListaAdy para representar el grafo con lista de adyacencia.

Cargado por

Renata Paiva
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
43 vistas3 páginas

Transformación de Grafo: Matriz a Lista

El documento describe cómo transformar un grafo representado con matriz de adyacencia a uno representado con lista de adyacencia. Se implementa un método Transformar en la clase GrafoMatriz que crea un nuevo grafo GrafoLista copiando los nodos y aristas del grafo original. También se implementan los métodos necesarios en las clases GrafoLista, NodoLista y ListaAdy para representar el grafo con lista de adyacencia.

Cargado por

Renata Paiva
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

EJERCICIO 1

Suponga que tiene las clases GrafoLista y GrafoMatriz con las siguientes estructuras:

public class GrafoMatriz {


int size;
int cantNodos;
Arco[][] matrizAdyacencia;
boolean[] nodosUsados;

} 7
3
public class Arco { 2
public boolean existe; 1 3
public int peso;

4 1
} 4
y 6
public class GrafoLista{
int size; 5
int cantNodos;
ListaAdy[] listaAdyacencia;
boolean[] nodosUsados;

}

Implemente una función en la clase GrafoMatriz que dado un grafo representado con la estructura de Matriz de
Adyacencia, devuelva un nuevo grafo con exactamente la misma información que el grafo original pero representado
con la estructura de Lista de Adyacencia.

La firma de la función debe ser la siguiente:

public GrafoLista Transformar (GrafoMatriz grafoM);

Implemente todos los métodos utilizados, y especifique las pre y post condiciones de todas las operaciones.

1 2 3 4 5
1 4 7
2 3 1 Transformar

3
4 6
5
Grafo Matriz Grafo Lista
SOLUCIÓN:

public GrafoLista Transformar (GrafoMatriz grafoM){


GrafoLista grafoL = new GrafoLista (grafoM.cantNodos);

//Copio vértices
for (int i=1; i<=grafoM.cantNodos; i++){
If grafoM.nodosUsados[i]
grafoL.agregarVertice(i);
}

//Copio aristas
for (int i=1; i<=grafoM.cantNodos; i++)
for (int j=1; j<=grafoM.cantNodos; j++)
if (grafoM.matrizAdyacencia[i][j].existe){
grafoL.agregarArista(i, j, grafoM.matrizAdyacencia[i][j].peso);
}
}
}
}

IMPLEMENTACIÓN DE MÉTODOS DE LA CLASE GRAFO LISTA:

//Crea el grafo vacío (sin nodos ni aristas) con capacidad de almacenamiento de n


//vértices
public GrafoLista(int n) {
this.size = 0;
this.cantNodos = n;
this.listaAdyacencia = new ListaAdy[this.cantNodos+1];
for (int i = 1; i<=this.cantNodos; i++)
this.listaAdyacencia[i]= new ListaAdy();

this.nodosUsados = new boolean[this.cantNodos+1];


}

//Pre: v no pertenece al grafo.


// 0<v<=capacidad grafo
//Post: Agrega el vértice v al grafo
public void agregarVertice(int v){
this.nodosUsados[v]=true;
this.size ++;
}

//Pre: origen y destino son los índices de vértices ya ingresados en el grafo


//Post: Agrega la arista origen-destino de peso "peso" en el grafo
public void agregarArista(int origen, int destino, int peso){
this.listaAdyacencia[origen].insertar(destino, peso);
}
IMPLEMENTACIÓN DE MÉTODOS EN CLASE NODO LISTA:

public class NodoLista{


int nodo;
int peso;
NodoLista sig;

public NodoLista (int nodo, int peso){


this.nodo = nodo;
this.peso = peso;
this.sig = null;
}
}

IMPLEMENTACIÓN DE MÉTODOS EN CLASE LISTAADY:

public class ListaAdy{


NodoLista inicio;

//Post:Inserta un nuevo nodo (conteniendo destino y peso) al principio de la lista.


public void insertar(int destino, int peso){
NodoLista nuevo = New NodoLista (destino, peso);
nuevo.sig = inicio;
this.inicio = nuevo;
}
}

También podría gustarte