예제 #1
1
  /**
   * Compute a distance-2 coloring of a bipartite graph G_b restricted to required edges
   *
   * <p>Input: - G_b bipartite graph with required egdes given as weights edge_weight - V contained
   * vertices are colored in the given ordering v_1, ..., v_n
   *
   * <p>Output: - G_b bipartite graph with colors as weights vertex_color
   */
  public static int PartialD2ColoringRestricted(GraphModel g, Vector<Integer> V) {
    Vector<Integer> N2 = new Vector<>();
    Vector<Integer> forbidden = new Vector<>(g.numOfVertices());
    for (int i = 0; i < g.numOfVertices(); i++) forbidden.add(-1);
    for (int v : V) g.getVertex(v).setColor(0);

    for (int v : V) {
      forbidden.set(0, v);
      if (IncidentToReqEdge(g, v)) {
        N2 = Neighbors.N_2_restricted(g, v);
        for (int n2 : N2) {
          if (g.getVertex(n2).getColor() > 0) {
            forbidden.set(g.getVertex(n2).getColor(), v);
          }
        }
        for (int i = 0; i < forbidden.size(); i++) {
          if (forbidden.get(i) != v) {
            g.getVertex(v).setColor(i);
            break;
          }
        }
      } else {
        g.getVertex(v).setColor(0);
      }
    }

    return getNumOfCols(g);
  }
예제 #2
0
  public static boolean StarBicoloringDynamicOrdering(
      GraphModel g, Vector<Integer> V_r, Vector<Integer> V_c, int Ordering) {
    Vector<Integer> forbiddenColors = new Vector<>(V_r.size());
    for (int i = 0; i < V_r.size(); i++) forbiddenColors.add(-1);
    Vector<Integer> Vertices = new Vector<>(V_r.size() + V_c.size());

    // GraphModel gg = g.getCopy();
    for (int i = 0; i < V_r.size(); i++) {
      Vertices.add(g.getVertex(i).getId());
    }

    for (int i = 0; i < V_c.size(); i++) {
      Vertices.add(g.getVertex(i).getId());
    }

    if (Ordering != 0) {
      if (Ordering == 1) {
        Vertices = OrderingHeuristics.LFO(g, Vertices);
      }
      if (Ordering == 2) {
        Vertices = OrderingHeuristics.SLO(g, Vertices);
      }
      if (Ordering == 3) {
        Vertices = OrderingHeuristics.IDO(g, Vertices);
      }
    }

    for (int v : Vertices) {
      if (g.getVertex(v).getColor() != 0) {
        forbiddenColors.set(0, v);
        for (Vertex w : g.getNeighbors(g.getVertex(v))) {
          if (w.getColor() <= 0) {
            for (Vertex x : g.getNeighbors(w)) {
              if (x.getColor() > 0) forbiddenColors.set(x.getColor(), v);
            }
          } else {
            for (Vertex x : g.getNeighbors(w)) {
              if (x.getColor() > 0) {
                for (Vertex y : g.getNeighbors(x)) {
                  if (y.getColor() > 0) {
                    if (w.getColor() == y.getColor() && w.getId() != y.getId()) {
                      forbiddenColors.set(x.getColor(), v);
                    }
                  }
                }
              }
            }
          }
        }
      }

      for (int i = 0; i < forbiddenColors.size(); i++) {
        if (forbiddenColors.get(i) != v) g.getVertex(v).setColor(i);
      }
    }
    return true;
  }
예제 #3
0
  public static boolean StarBicoloringRestricted(
      GraphModel g, Vector<Integer> V_r, Vector<Integer> V_c) {
    Vector<Integer> forbiddenColors = new Vector<>(V_r.size());
    for (int i = 0; i < V_r.size(); i++) forbiddenColors.add(-1);
    Vector<Integer> Vertices = new Vector<>(V_r.size() + V_c.size());

    // GraphModel gg = g.getCopy();
    for (int v_r : V_r) Vertices.add(v_r);
    for (int v_c : V_c) Vertices.add(v_c);

    for (int v : Vertices) {
      if (g.getVertex(v).getColor() != 0) {
        forbiddenColors.set(0, v);
        for (Vertex w : g.getNeighbors(g.getVertex(v))) {
          if (w.getColor() <= 0) {
            for (Vertex x : g.getNeighbors(w)) {
              if (x.getColor() > 0) {
                if (g.getEdge(x, w).getWeight() == 1
                    || g.getEdge(w, g.getVertex(v)).getWeight() == 1) {
                  forbiddenColors.set(x.getColor(), v);
                }
              }
            }
          } else {
            for (Vertex x : g.getNeighbors(w)) {
              System.out.println(" jez " + g.getEdge(x, w).getWeight());
              if (g.getEdge(x, w).getWeight() == 1) {
                if (x.getColor() > 0) {
                  for (Vertex y : g.getNeighbors(x)) {
                    if (y.getColor() > 0) {
                      if (w.getColor() == y.getColor() && w.getId() != y.getId()) {
                        forbiddenColors.set(x.getColor(), v);
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }

      for (int i = 0; i < forbiddenColors.size(); i++) {
        if (forbiddenColors.get(i) != v) {
          g.getVertex(v).setColor(i);
        }
      }
    }
    return true;
  }
예제 #4
0
  /**
   * Compute a star bicoloring of a bipartite graph G_b restricted to the required edges (this
   * version was implemented for Michael Luelfesmann's diploma thesis)
   *
   * <p>Input: - G_b bipartite graph with required egdes given as weights edge_weight - V_r
   * contained row vertices are colored in the given ordering v_1, ..., v_n - V_c contained column
   * vertices are colored in the given ordering v_1, ..., v_n - Mode parameter \rho (\rho=Mode/2) -
   * Mode2 parameter \rho if using independent set algorithm of Coleman (Mode==1)
   *
   * <p>Output: - G_b bipartite graph with colors given as weights vertex_color
   */
  public static int StarBicoloringSchemeRestricted(
      GraphModel g, Vector<Integer> V_r, Vector<Integer> V_c, int Mode, int Mode2) {
    Vector<Integer> IS = new Vector<>();

    // Compute independent set
    System.out.println("Mode " + Mode);
    if (Mode == 1) {
      IS = IndSet.ISetRestricted(g, V_r, V_c, Mode2); // ISet = IS_Coleman(G_b,V_r,V_c);
    } else if (Mode == 2) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 1.0f);
    } else if (Mode == 3) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 1.5f);
    } else if (Mode == 4) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 2);
    } else if (Mode == 5) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 2.5f);
    } else if (Mode == 6) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 3.0f);
    } else if (Mode == 7) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 3.5f);
    }

    // Color vertices in independent set with color 0
    for (int IS_it : IS) {
      g.getVertex(IS_it).setColor(0);
    }

    // Color all vertices which are not colored
    StarBicoloringRestricted(g, V_r, V_c);

    return getNumOfCols(g);
  }
예제 #5
0
  public Object calculate(GraphModel g) {
    SubGraph sg = new SubGraph();
    MSTPrim mp = new MSTPrim();
    double[][] adj = g.getAdjacencyMatrix().getArray();
    int[][] adjMatrix = new int[g.getVerticesCount()][g.getVerticesCount()];

    for (int i = 0; i < g.getVerticesCount(); i++) {
      for (int j = 0; j < g.getVerticesCount(); j++) {
        if (adj[i][j] == 0) adjMatrix[i][j] = 0;
        else adjMatrix[i][j] = 1;
      }
    }
    int[] parent = mp.prim(adjMatrix);
    for (int i = 0; i < g.getVerticesCount(); i++) {
      if (parent[i] != -1) {
        sg.edges.add(g.getEdge(g.getVertex(i), g.getVertex(parent[i])));
      }
    }
    return sg;
  }
예제 #6
0
  public static int StarBicoloringSchemeDynamicOrderingRestricted(
      GraphModel g, Vector<Integer> V_r, Vector<Integer> V_c, int Mode, int sort, int Mode2) {
    Vector<Integer> IS = new Vector<>();
    Vector<Integer> num_colors = new Vector<>();

    // Compute independent set
    if (Mode == 1) {
      IS = IndSet.ISetRestricted(g, V_r, V_c, Mode2); // ISet = IS_Coleman(G_b,V_r,V_c);
    } else if (Mode == 2) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 1.0f);
    } else if (Mode == 3) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 1.5f);
    } else if (Mode == 4) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 2);
    } else if (Mode == 5) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 2.5f);
    } else if (Mode == 6) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 3.0f);
    } else if (Mode == 7) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 3.5f);
    } else if (Mode == 8) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 4.0f);
    } else if (Mode == 9) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 4.5f);
    } else if (Mode == 10) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 5.0f);
    } else if (Mode == 11) {
      IS = IndSet.ISetVariantRestricted(g, V_r, V_c, 5.5f);
    }

    // Color vertices in independent set with color 0
    for (int IS_it : IS) {
      g.getVertex(IS_it).setColor(0);
    }

    // Color all vertices which are not colored
    StarBicoloringDynamicOrderingRestricted(g, V_r, V_c, sort);
    return getNumOfCols(g);
  }
예제 #7
0
  public static int StarBicoloringSchemeCombinedVertexCoverColoringRestricted(
      GraphModel g, final Vector<Integer> V_rr, final Vector<Integer> V_cc, final int Mode) {
    Vector<Integer> IS = new Vector<>();
    Vector<Integer> V_r = new Vector<>();
    Vector<Integer> V_c = new Vector<>();
    V_r.addAll(V_rr);
    V_c.addAll(V_cc);
    Vector<Integer> num_colors;
    Vector<Integer> V_r_aux = new Vector<>();
    Vector<Integer> V_c_aux = new Vector<>();
    V_r_aux.addAll(V_r);
    V_c_aux.addAll(V_c);
    GraphModel gaux = g.getCopy();
    float ratio = 1;

    if (Mode != 1) ratio = Mode / 2;

    Vector<Pair<Integer, Integer>> Degree_V_r_aux = new Vector<>();
    Vector<Pair<Integer, Integer>> Degree_V_c_aux = new Vector<>();
    Vector<Pair<Integer, Integer>> copy_real_r = new Vector<>();
    Vector<Pair<Integer, Integer>> copy_real_c = new Vector<>();
    Vector<Integer> forbiddenColors = new Vector<>(V_r.size());
    for (int i = 0; i < V_r.size(); i++) {
      forbiddenColors.add(-1);
    }

    Iterator<Integer> v_r_aux_it = V_r_aux.iterator();
    for (int v_r : V_r) {
      if (v_r_aux_it.hasNext()) {
        int v_r_aux = v_r_aux_it.next();
        copy_real_r.add(new Pair<>(v_r, v_r_aux));
      }
    }

    Iterator<Integer> v_c_aux_it = V_c_aux.iterator();
    for (int v_c : V_c) {
      if (v_c_aux_it.hasNext()) {
        int v_c_aux = v_c_aux_it.next();
        copy_real_c.add(new Pair<>(v_c, v_c_aux));
      }
    }

    for (int v_r : V_r_aux) {
      Degree_V_r_aux.add(new Pair<>(v_r, gaux.getDegree(gaux.getVertex(v_r))));
    }

    for (int v_c : V_c_aux) {
      Degree_V_c_aux.add(new Pair<>(v_c, gaux.getDegree(gaux.getVertex(v_c))));
    }

    while (gaux.getEdgesCount() > 0) {
      int max_degree_V_r_aux = 0;
      for (Pair<Integer, Integer> di : Degree_V_r_aux) {
        di.second = gaux.getDegree(gaux.getVertex(di.first));
        int degree_v_r = di.second;
        if (degree_v_r > max_degree_V_r_aux) {
          max_degree_V_r_aux = degree_v_r;
        }
      }
      System.out.println("1");

      int max_degree_V_c_aux = 0;
      for (Pair<Integer, Integer> di : Degree_V_c_aux) {
        di.second = gaux.getDegree(gaux.getVertex(di.first));
        int degree_v_c = di.second;
        if (degree_v_c > max_degree_V_c_aux) {
          max_degree_V_c_aux = degree_v_c;
        }
      }
      System.out.println("2");

      if (max_degree_V_r_aux > ratio * max_degree_V_c_aux) {
        Vector<Pair<Integer, Integer>> removedEdges = new Vector<>();
        for (Pair<Integer, Integer> di : Degree_V_r_aux) {
          if (max_degree_V_r_aux == di.second) {
            Pair<Integer, Integer> cr = new Pair<>(0, 0);
            for (Pair<Integer, Integer> crtmp : copy_real_r) {
              if (crtmp.second.equals(di.first)) {
                cr = crtmp;
                break;
              }
            }
            int v = 0;
            for (int tmp : V_r) {
              if (cr.first == v) {
                v = tmp;
                break;
              }
            }
            System.out.println("33");

            IndSet.clearVertex(gaux.getVertex(di.first), gaux);
            removedEdges.add(di);

            System.out.println("44");
            forbiddenColors.set(0, v);
            for (Vertex w : g.getNeighbors(g.getVertex(v))) {
              if (w.getColor() <= 0) {
                for (Vertex x : g.getNeighbors(w)) {
                  if (x.getColor() > 0) {
                    if (g.getEdge(w, g.getVertex(v)).getWeight() == 1
                        || g.getEdge(w, x).getWeight() == 1) {
                      forbiddenColors.set(x.getId(), v);
                    }
                  }
                }
              } else { // Color[w]>0
                for (Vertex x : g.getNeighbors(w)) {
                  if (x.getColor() > 0) {
                    if (g.getEdge(w, x).getWeight() == 1) {
                      for (Vertex y : g.getNeighbors(x)) {
                        if (y.getColor() > 0) {
                          if (w.getColor() == y.getColor() && w.getId() != y.getId()) {
                            forbiddenColors.set(x.getId(), v);
                          }
                        }
                      }
                    }
                  }
                }
              }
              System.out.println("45s");
            }
            System.out.printf("456");

            // Find first color which can be assigned to v_c
            for (int i = 0; i < forbiddenColors.size(); i++) {
              if (forbiddenColors.get(i) != v) {
                g.getVertex(v).setColor(forbiddenColors.get(i));
                break;
              }
            }
            System.out.println("500");
          }
        }
        Degree_V_r_aux.removeAll(removedEdges);
      } else {
        Vector<Pair<Integer, Integer>> removedEdges = new Vector<>();
        for (Pair<Integer, Integer> di : Degree_V_c_aux) {
          if (max_degree_V_c_aux == di.second) {
            Pair<Integer, Integer> cr = new Pair<>(0, 0);
            for (Pair<Integer, Integer> crtmp : copy_real_c) {
              if (crtmp.second == di.first) {
                cr = crtmp;
                break;
              }
            }
            int v = 0;
            for (int tmp : V_c) {
              if (cr.first == v) {
                v = tmp;
                break;
              }
            }

            IndSet.clearVertex(gaux.getVertex(di.first), gaux);
            removedEdges.add(di);

            System.out.println("3");
            forbiddenColors.set(0, v);
            System.out.println("3.0q" + v);
            for (Vertex w : g.getNeighbors(g.getVertex(v))) {
              System.out.println("3.1");
              if (w.getColor() <= 0) {
                for (Vertex x : g.getNeighbors(w)) {
                  if (x.getColor() > 0) {
                    if (g.getEdge(w, g.getVertex(v)).getWeight() == 1
                        || g.getEdge(w, x).getWeight() == 1) {
                      forbiddenColors.set(x.getId(), v);
                    }
                  }
                }
                System.out.println("3.2");

              } else { // Color[w]>0
                for (Vertex x : g.getNeighbors(w)) {
                  System.out.println("3.3");
                  if (x.getColor() > 0) {
                    if (g.getEdge(w, x).getWeight() == 1) {
                      for (Vertex y : g.getNeighbors(x)) {
                        if (y.getColor() > 0) {
                          if (w.getColor() == y.getColor() && w.getId() != y.getId()) {
                            forbiddenColors.set(x.getId(), v);
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
            System.out.println("3.5");

            // Find first color which can be assigned to v_c
            for (int i = 0; i < forbiddenColors.size(); i++) {
              if (forbiddenColors.get(i) != v) {
                g.getVertex(v).setColor(forbiddenColors.get(i));
                break;
              }
            }
          }
        }
        System.out.println("4");
        Degree_V_c_aux.removeAll(removedEdges);
      }
    }
    for (Pair<Integer, Integer> di : Degree_V_r_aux) {
      IS.add(di.first);
    }
    for (Pair<Integer, Integer> di : Degree_V_c_aux) {
      IS.add(di.first);
    }

    for (int i = 0; i < IS.size(); i++) {
      g.getVertex(IS.get(i)).setColor(0);
    }

    return getNumOfCols(g);
  }
예제 #8
0
 public static boolean IncidentToReqEdge(GraphModel g, int Vertex) {
   for (Edge e : g.edges(g.getVertex(Vertex))) if (e.getWeight() == 1) return true;
   return false;
 }
예제 #9
0
  public static int color(
      int Coloring,
      int Ordering,
      int Mode,
      int RequiredPattern,
      int rho,
      int blockSize,
      File file) {
    int Mode2 = 0;
    if (Ordering != 0) {
      if (Coloring == 3) {
        Ordering += 3;
      }
    }

    if (Mode == 3) {
      if (rho != 0) {
        Mode = 2 * rho;
      }
    }
    if (Mode == 0) {
      if (rho != 0) {
        Mode2 = 2 * rho;
      }
    }

    Matrix mm = new Matrix(5, 5);
    try {
      mm = MM.loadMatrixFromSPARSE(file);
    } catch (IOException e) {
      e.printStackTrace();
    }

    int rows = mm.getRowDimension();
    int cols = mm.getColumnDimension();

    GraphModel g = new GraphModel(false);
    Vector<Integer> V_r = new Vector<>();
    Vector<Integer> V_c = new Vector<>();

    for (int i = 0; i < rows; i++) {
      Vertex v = new Vertex();
      v.setColor(-1);
      g.addVertex(v);
      V_r.add(v.getId());
    }

    for (int i = 0; i < cols; i++) {
      Vertex v = new Vertex();
      v.setColor(-1);
      g.addVertex(v);
      V_c.add(v.getId());
    }

    for (int i = 0; i < rows; i++) {
      for (int j = 0; j < cols; j++) {
        if (mm.get(i, j) == 1) {
          g.addEdge(new Edge(g.getVertex(i), g.getVertex(rows + j)));
        }
      }
    }

    // new GraphData(Application.getBlackBoard()).core.showGraph(g);

    // Initialize required pattern
    int entries_pattern = 0;
    // If edge e \in E_S then edge_property edge_weight=1 else
    switch (RequiredPattern) {
      case 0:
        break;
      case 1:
        for (Edge e : g.getEdges()) {
          if (Math.abs(e.source.getId() - e.target.getId()) == rows) {
            e.setWeight(1);
            entries_pattern++;
          }
        }

        break;
      case 2:
        for (Edge e : g.getEdges()) {
          e.setWeight(1);
          entries_pattern++;
        }
        break;
      case 3:
        for (Edge e : g.getEdges()) {
          int RowCoordinate = e.source.getId() + rows;
          int ColumnCoordinate = e.target.getId();
          int RelativeDistance = RowCoordinate - ColumnCoordinate;
          int RowBlock = RowCoordinate / blockSize;
          int ColumnBlock = ColumnCoordinate / blockSize;
          if ((RelativeDistance < blockSize)
              && (RelativeDistance > -blockSize)
              && (RowBlock == ColumnBlock)) {
            e.setWeight(1);
            entries_pattern++;
          }
        }
        break;
    }

    // Presorting of the vertices
    if (Coloring == 1
        || Coloring == 2
        || Coloring == 3
        || Coloring == 4
        || Coloring == 5
        || Coloring == 6) {
      switch (Ordering) {
        case 0:
          break;
        case 1:
          if (Coloring == 1) {
            V_c = OrderingHeuristics.LFO(g, V_c);
          } else if (Coloring == 2) {
            V_r = OrderingHeuristics.LFO(g, V_r);
          } else if (Coloring == 5 || Coloring == 6) {
            V_r = OrderingHeuristics.LFO(g, V_r);
            V_c = OrderingHeuristics.LFO(g, V_c);
          }
          break;
        case 2:
          if (Coloring == 1) {
            V_c = OrderingHeuristics.SLO(g, V_c);
          } else if (Coloring == 2) {
            V_r = OrderingHeuristics.SLO(g, V_r);
          } else if (Coloring == 5) {
            V_r = OrderingHeuristics.SLO(g, V_r);
            V_c = OrderingHeuristics.SLO(g, V_c);
          }
          break;
        case 3:
          if (Coloring == 1) {
            V_c = OrderingHeuristics.IDO(g, V_c);
          } else if (Coloring == 2) {
            V_r = OrderingHeuristics.IDO(g, V_r);
          } else if (Coloring == 5) {
            V_r = OrderingHeuristics.IDO(g, V_r);
            V_c = OrderingHeuristics.IDO(g, V_c);
          }
          break;
        case 4:
          if (Coloring == 3) {
            V_c = OrderingHeuristics.LFOrestricted(g, V_c);
          } else if (Coloring == 4) {
            V_r = OrderingHeuristics.LFOrestricted(g, V_r);
          } else if (Coloring == 6) {
            V_r = OrderingHeuristics.LFOrestricted(g, V_r);
            V_c = OrderingHeuristics.LFOrestricted(g, V_c);
          }
          break;
        case 5:
          if (Coloring == 3) {
            V_c = OrderingHeuristics.SLOrestricted(g, V_c);
          } else if (Coloring == 4) {
            V_r = OrderingHeuristics.SLOrestricted(g, V_r);
          } else if (Coloring == 6) {
            V_r = OrderingHeuristics.SLOrestricted(g, V_r);
            V_c = OrderingHeuristics.SLOrestricted(g, V_c);
          }
          break;
        case 6:
          if (Coloring == 3) {
            V_c = OrderingHeuristics.IDOrestricted(g, V_c);
          } else if (Coloring == 4) {
            V_r = OrderingHeuristics.IDOrestricted(g, V_r);
          } else if (Coloring == 6) {
            V_r = OrderingHeuristics.IDOrestricted(g, V_r);
            V_c = OrderingHeuristics.IDOrestricted(g, V_c);
          }
          break;
      }
    }
    int num_colors = 0;

    // Coloring of the vertices
    switch (Coloring) {
      case 1:
        System.out.println("PartialD2ColoringCols");
        num_colors = ColorAlgs.PartialD2Coloring(g, V_c);
        break;
      case 2:
        System.out.println("PartialD2ColoringRows");
        num_colors = ColorAlgs.PartialD2Coloring(g, V_r);
        break;
      case 3:
        System.out.println("PartialD2ColoringRestrictedCols");
        num_colors = ColorAlgs.PartialD2ColoringRestricted(g, V_c);
        break;
      case 4:
        System.out.println("PartialD2ColoringRestrictedRows");
        num_colors = ColorAlgs.PartialD2ColoringRestricted(g, V_r);
        break;
      case 5:
        System.out.println("StarBicoloringScheme");
        num_colors = ColorAlgs.StarBicoloringScheme(g, V_r, V_c, Mode, Mode2);
        break;
      case 6:
        System.out.println("StarBicoloringSchemeRestricted " + V_r.size() + " " + V_c.size());
        num_colors = ColorAlgs.StarBicoloringSchemeRestricted(g, V_r, V_c, Mode, Mode2);
        break;
      case 7:
        System.out.println("StarBicoloringSchemeDynamicOrdering");
        num_colors =
            ColorAlgs.StarBicoloringSchemeDynamicOrdering(g, V_r, V_c, Mode, Ordering, Mode2);
        break;
      case 8:
        System.out.println("StarBicoloringSchemeCombinedVertexCoverColoring");
        num_colors = ColorAlgs.StarBicoloringSchemeCombinedVertexCoverColoring(g, V_r, V_c, Mode);
        break;
      case 9:
        System.out.println("StarBicoloringSchemeDynamicOrderingRestricted");
        num_colors =
            ColorAlgs.StarBicoloringSchemeDynamicOrderingRestricted(
                g, V_r, V_c, Mode, Ordering, Mode2);
        break;
      case 10:
        System.out.println("StarBicoloringSchemeCombinedVertexCoverColoringRestricted");
        num_colors =
            ColorAlgs.StarBicoloringSchemeCombinedVertexCoverColoringRestricted(g, V_r, V_c, Mode);
        break;
    }

    return num_colors;
  }