// GraphTea Project: http://github.com/graphtheorysoftware/GraphTea // Copyright (C) 2012 Graph Theory Software Foundation: http://GraphTheorySoftware.com // Copyright (C) 2008 Mathematical Science Department of Sharif University of Technology // Distributed under the terms of the GNU Lesser General Public License (LGPL): http://www.gnu.org/licenses/ package graphtea.extensions.reports; import graphtea.graph.graph.GraphColoring; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.platform.parameter.Parameter; import graphtea.platform.parameter.Parametrizable; import graphtea.plugins.reports.extension.GraphReportExtension; import java.util.Vector; /** * @author Azin Azadi */ public class ColoringReport implements GraphReportExtension, ColoringListener, Parametrizable { Partitioner p; Vector<GraphColoring> colorings; boolean found; @Parameter(name = "Lower Bound", description = "Lower Bound for the number of colors, This will make the search Interval smaller") public Integer lowerBound = 1; @Parameter(name = "All Colorings", description = "Create a list of all colorings of graph using minimum number of colors") public Boolean allColorings=false; public Object calculate(GraphModel g) { p = new Partitioner(g); colorings = new Vector<>(1); int ct = lowerBound; found = false; while (!found) { tryToColor(ct++); } return colorings; } public void tryToColor(int t) { p.findAllPartitionings(t, this); } public boolean coloringFound(final int t) { found = true; GraphColoring coloring = new GraphColoring(); for (int i = 0; i < p.vertices.length; i++) { coloring.vertexColors.put((Vertex) p.vertices[i], p.color[i]); } colorings.add(coloring); return !allColorings; } public String getName() { return "All Vertex Colorings"; } public String getDescription() { return "Graph Vertex Coloring"; } public String checkParameters() { return lowerBound < 0 ? "Lower Bound should be positive" : null; } @Override public String getCategory() { return "Coloring"; } }