コード例 #1
0
ファイル: DijkstraGraph.java プロジェクト: wilkyo/sig-1337
  public List<Node> dijkstra(Building src, Building dest) {
    PriorityQueue<DijkstraVertex> aVisiter = new PriorityQueue<DijkstraVertex>();

    for (Node n : src.getNeighbors()) {
      DijkstraVertex source = (DijkstraVertex) get(n);
      aVisiter.add(source);
      source.distance = 0;
    }

    DijkstraVertex actuel = aVisiter.poll();
    int cpt = 0;
    while (!estUnVoisin(actuel.node, dest) && aVisiter.size() > 0) {
      cpt++;
      actuel.visited = true;
      for (Node n : actuel.neighbors) {
        int dist = actuel.distance + 1;
        DijkstraVertex tmp = (DijkstraVertex) get(n);
        if (dist < tmp.distance) {
          tmp.distance = dist;
          tmp.previous = actuel;
          if (!tmp.visited) {
            aVisiter.add(tmp);
          }
        }
      }
      actuel = aVisiter.poll();
    }

    System.out.println("Itérations: " + cpt);
    DijkstraVertex finalNode = null;
    for (Node n : dest.getNeighbors()) {
      actuel = (DijkstraVertex) get(n);
      if (finalNode == null) finalNode = actuel;
      if (actuel.distance < finalNode.distance) finalNode = actuel;
    }
    System.out.println(finalNode.distance);

    LinkedList<Node> res = new LinkedList<Node>();
    while (finalNode != null) {
      res.addFirst(finalNode.node);
      finalNode = finalNode.previous;
    }
    return res;
  }