Está en la página 1de 3

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