implémentation de label + debut Djikstra
This commit is contained in:
parent
e24134bf5e
commit
857b0215f4
3 changed files with 92 additions and 5 deletions
|
|
@ -1,5 +1,9 @@
|
|||
package org.insa.graphs.algorithm.shortestpath;
|
||||
|
||||
import org.insa.graphs.algorithm.utils.BinaryHeap;
|
||||
import org.insa.graphs.model.Graph;
|
||||
import org.insa.graphs.model.Node;
|
||||
|
||||
public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
||||
|
||||
public DijkstraAlgorithm(ShortestPathData data) {
|
||||
|
|
@ -16,6 +20,35 @@ public class DijkstraAlgorithm extends ShortestPathAlgorithm {
|
|||
// variable that will contain the solution of the shortest path problem
|
||||
ShortestPathSolution solution = null;
|
||||
|
||||
Graph graph = data.getGraph();
|
||||
final int nbNodes = graph.size();
|
||||
|
||||
|
||||
//Remplir le tableau
|
||||
Label[] labels=new Label[nbNodes];
|
||||
for (Node node:graph.getNodes()){
|
||||
labels[node.getId()]=new Label(node);
|
||||
|
||||
|
||||
|
||||
|
||||
BinaryHeap<Label> tas=new BinaryHeap<>();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// TODO: implement the Dijkstra algorithm
|
||||
|
||||
// when the algorithm terminates, return the solution that has been found
|
||||
|
|
|
|||
|
|
@ -0,0 +1,56 @@
|
|||
package org.insa.graphs.algorithm.shortestpath;
|
||||
|
||||
import org.insa.graphs.model.Arc;
|
||||
import org.insa.graphs.model.Node;
|
||||
|
||||
|
||||
|
||||
public class Label implements Comparable<Label>{
|
||||
|
||||
|
||||
private Node sommetCourant;
|
||||
private boolean marque;
|
||||
private double coutRealise;
|
||||
private Arc pere;
|
||||
|
||||
public Label(Node sommetCourant) {
|
||||
this.sommetCourant=sommetCourant;
|
||||
this.marque=false;
|
||||
this.coutRealise=0;
|
||||
this.pere=null;
|
||||
|
||||
}
|
||||
|
||||
public Node getSommetCourant(){
|
||||
return this.sommetCourant;
|
||||
|
||||
}
|
||||
public boolean isMarque(){
|
||||
return this.marque;
|
||||
}
|
||||
public double getCoutRealise(){
|
||||
return this.coutRealise;
|
||||
}
|
||||
public Arc getPere(){
|
||||
return this.pere;
|
||||
}
|
||||
public void setMarque(){
|
||||
this.marque=true;
|
||||
}
|
||||
public void setCoutRealise(double coutRealise){
|
||||
this.coutRealise=coutRealise;
|
||||
|
||||
}
|
||||
public void setPere(Arc pere){
|
||||
this.pere=pere;
|
||||
}
|
||||
public double getCost(){
|
||||
return this.coutRealise;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compareTo(Label other){
|
||||
return Double.compare(this.getCost(), other.getCost());
|
||||
|
||||
}
|
||||
}
|
||||
|
|
@ -233,19 +233,17 @@ public class Path {
|
|||
* @deprecated Need to be implemented.
|
||||
*/
|
||||
public boolean isValid() {
|
||||
// Cas 1 : chemin vide
|
||||
|
||||
if (this.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
// Cas 2 : nœud unique, pas d'arcs
|
||||
|
||||
if (this.arcs.isEmpty()) {
|
||||
return true;
|
||||
}
|
||||
// Cas 3 : le premier arc doit partir de l'origine
|
||||
if (!this.arcs.get(0).getOrigin().equals(this.origin)) {
|
||||
if (!this.arcs.get(0).getOrigin().equals(this.origin)) {
|
||||
return false;
|
||||
}
|
||||
// Cas 4 : chaque arc doit enchaîner sur le suivant
|
||||
for (int i = 0; i < this.arcs.size() - 1; i++) {
|
||||
if (!this.arcs.get(i).getDestination().equals(this.arcs.get(i + 1).getOrigin())) {
|
||||
return false;
|
||||
|
|
|
|||
Loading…
Reference in a new issue