Академический Документы
Профессиональный Документы
Культура Документы
****************************************************/
/*
EJEMPLO DE INPUT
59
127
142
231
242
354
423
438
455
535
*/
import java.util.*;
V = sc.nextInt();
inicial = sc.nextInt();
dijkstraAlgorithm.dijkstra(inicial);
dijkstraAlgorithm.printShortestPath();
class Dijkstra{
private final int INF = 1<<30; //definimos un valor grande que represente la distancia infinita inicial,
basta conque sea superior al maximo valor del peso en alguna de las aristas
private List< List< Node > > ady = new ArrayList< List< Node > >(); //lista de adyacencia
private int distancia[ ] = new int[ MAX ]; //distancia[ u ] distancia de vértice inicial a vértice con ID
=u
private PriorityQueue< Node > Q = new PriorityQueue<Node>(); //priority queue propia de Java,
usamos el comparador definido para que el de menor valor este en el tope
this.V = V;
dijkstraEjecutado = false;
//En el caso de java usamos una clase que representara el pair de C++
this.first = d;
this.second = p;
public int compareTo( Node other){ //es necesario definir un comparador para el correcto
funcionamiento del PriorityQueue
return -1;
};
//función de inicialización
}
}
//Paso de relajacion
//Si la distancia del origen al vertice actual + peso de su arista es menor a la distancia del origen al
vertice adyacente
distancia[ inicial ] = 0; //Este paso es importante, inicializamos la distancia del inicial como 0
if( visitado[ actual ] ) continue; //Si el vértice actual ya fue visitado entonces sigo sacando
elementos de la cola
for( int i = 0 ; i < ady.get( actual ).size() ; ++i ){ //reviso sus adyacentes del vertice actual
dijkstraEjecutado = true;
void addEdge( int origen , int destino , int peso , boolean dirigido ){
if( !dirigido )
void printShortestPath(){
if( !dijkstraEjecutado ){
return;
int destino;
destino = sc.nextInt();
print( destino );
System.out.printf("\n");
//Impresion del camino mas corto desde el vertice inicial y final ingresados
return V;
V = numeroDeVertices;