Solución - Web del laboratorio del DIT

Anuncio
Dpto. Ingeniería de Sistemas Telemáticos
Universidad Politécnica de Madrid
ETSI Telecomunicación, Ciudad Universitaria, 28040 Madrid
LABORATORIO DE PROGRAMACIÓN - JUNIO 2007
Examen del Proyecto P4 - Solución
Pregunta 1 (puntos: 10/3)
Codifique un método público dentro de la clase Dijkstra.java que devuelva la distancia media desde el nodo
que se le pasa como parámetro al resto de los nodos del grafo.
public double getDistanciaMedia (int nodoOrigen) { ... }
Nota: no es necesario realizar ningún procesamiento especial de una distancia INFINITA (codificada como
igual a cero); es decir, dadas las siguientes distancias mínimas en un grafo de 5 nodos :
[ Grafo.INFINITO, 3, 2, Grafo.INFINITO, 5 ]
la distancia media sería 2.
/**
* Devuelve la media de las distancias mínimas desde un nodo al resto.
* @param origen Nodo origen a partir del cual se calculan las distancias.
* @return Distancia media (de las mínimas)
desde el origen al resto de los nodos.
*/
public double getDistanciaMedia (int origen) {
int [] distancias = getCaminosMinimos(origen);
double suma = 0.0;
for (int i = 0; i < numNodos; i++ ) {
if (distancias[i] != Grafo.INFINITO) {
suma = suma + distancias[i];
}
}
return suma / (distancias.length-1);
}
Laboratorio de Programación
16.6.2007
página 1
Pregunta 2 (puntos: 10/3)
Codifique un método público dentro de la clase Dijkstra.java que devuelva TRUE o FALSE dependiendo de
si se puede llegar desde un nodo a otro:
public boolean hayConexion (int nodoOrigen, int nodoDestino) { ... }
Se devuelve TRUE tanto si se puede llegar directamente (conexión directa) como si se puede llegar a través
de otros nodos del grafo.
/**
* Indica si un nodo tiene conexión con otro dado
* (un nodo tiene conexión consigo mismo)
* @param origen Nodo origen
* @param destino Nodo destino
* @return TRUE si hay conectividad desde el nodo origen al nodo destino
*/
public boolean hayConexion (int origen, int destino) {
int [] distancias = getCaminosMinimos(origen);
if ((origen == destino) || (distancias[destino] != Grafo.INFINITO)){
return true;
}
else {
return false;
}
}
Pregunta 3 (puntos: 10/3)
Explique qué condición o condiciones deberían darse en un grafo para que se cumpliera SIEMPRE la
siguiente igualdad:
getCaminoMinimo(nodoA, nodoB) = getCaminoMinimo (nodoB, nodoA).
Una condición suficiente es que todos los arcos del grafo sean bidireccionales
(que se traduce en que la matriz de pesos sea simétrica).
Laboratorio de Programación
16.6.2007
página 2
Descargar