Package dijkstra

Source Code of dijkstra.Dijkstra

package dijkstra;
import java.util.ArrayList;

import labyrinthe.GraphInterface;
import labyrinthe.VertexInterface;

public class Dijkstra {
 
  public PreviousInterface dijkstra( GraphInterface g, VertexInterface r) {
   
    ASet a = new ASet();
    a.addVertex(r);
   
    Previous previous = new Previous();
   
    Pi pi = new Pi();
   
    return dijkstra(g, r, a, pi, previous);
  }

  private PreviousInterface dijkstra( GraphInterface g, VertexInterface r, ASetInterface A, PiInterface pi, PreviousInterface previous) {
   
    ArrayList<VertexInterface> vertexList = g.getAllVertices();
    int n = vertexList.size();// n = ordre du graph
    VertexInterface pivot = r;
    boolean continuer = true; // Permet de sortir de la boucle lorsque pivot est null, ce qui arrive lorsqu'aucun chemin de va de D à A.
    int i;
   
   
    //initialisation de pi
    for(i = 0 ; i < n ; i++) {
      pi.setPi(vertexList.get(i), -1);
    }
    pi.setPi(r, 0);
   
    i = 0;
    while(i < n - 1 && continuer) {
     
     
      ArrayList<VertexInterface> listNextVertex = pivot.getNext();
     
      if(listNextVertex != null) {
     
        for(int j = 0 ; j < listNextVertex.size() ; j++) {
          VertexInterface successeurPivot = listNextVertex.get(j);
         
          if(!A.isInA(successeurPivot)) {
            if(pi.getPi(pivot) + g.getWeight(pivot, successeurPivot) < pi.getPi(successeurPivot) || pi.getPi(successeurPivot) == -1) {
              pi.setPi(successeurPivot, pi.getPi(pivot) + g.getWeight(pivot, successeurPivot));
              previous.setPrevious(successeurPivot, pivot);
            }
          }
 
        }
      } else {
        System.out.println("Null !!");
      }

      //recherche du min de pi(y) pour y dans G\A :
      int min = -1; // -1 <=> +infinity
      VertexInterface minVertex = null;
      for(int j = 0 ; j < n ; j++) {
        VertexInterface currentVertex = vertexList.get(j);

        if(!A.isInA(currentVertex)) {
          if(pi.getPi(currentVertex) != -1 && (min > pi.getPi(currentVertex) || min == -1)) {
            min = pi.getPi(currentVertex);
            minVertex = currentVertex;
          }
        }
      }

      pivot = minVertex;
      A.addVertex(pivot);
     
      //si aucun pivot, il n'y a pas de chemin solution, on s'arrête.
      continuer = (pivot != null);
     
      i++;
    }

    return previous;

  }

}
TOP

Related Classes of dijkstra.Dijkstra

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.