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; }
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; }