Exemple #1
0
  public void minimalSpanning(int sVertex)
        // Method to create the edges of the minimal
        // spanning tree. The weight of the edges is also
        // saved in the array edgeWeights.
      {
    // ToDo

    for (int i = 0; i < edges.length; i++) {
      v.add((Integer) i);
    }
    vNew.add(sVertex);
    for (int i = 0; i < graph.length; i++) {
      LinkedListClass.LinkedListIterator it = graph[i].iterator();
      while (it.hasNext()) {
        Pair p = new Pair();
        p.u = i;
        p.w = (Integer) it.next();
        p.weight = weights[p.u][p.w];
        e.add(p);
      }
    }

    while (eNew.size() < v.size() - 1) {
      Pair smallestEdge = new Pair();
      smallestEdge.weight = Double.MAX_VALUE;
      for (Pair edge : e) {
        if (!eNew.contains(edge)
            && ((vNew.contains(edge.u) && !vNew.contains(edge.w)
                || vNew.contains(edge.w) && !vNew.contains(edge.u)))) {
          if (edge.weight < smallestEdge.weight) {
            smallestEdge = edge;
          }
        }
      }

      eNew.add(smallestEdge);
      if (vNew.contains(smallestEdge.u)) {
        vNew.add(smallestEdge.w);
      } else {
        vNew.add(smallestEdge.u);
      }
    }
    for (Pair edge : eNew) {

      edges[edge.u] = edge.w;
      edgeWeights[edge.u] = edge.weight;
    }
  } // end minimalSpanning