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