// 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.actions; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.platform.parameter.Parameter; import graphtea.platform.parameter.Parametrizable; import graphtea.plugins.main.GraphData; import graphtea.plugins.main.core.AlgorithmUtils; import graphtea.plugins.main.extension.GraphActionExtension; import java.util.Vector; /** * @author Azin Azadi */ public class GraphPower implements GraphActionExtension, Parametrizable { @Parameter public int k = 2; Vector<Edge> toInsert = new Vector<>(); Vector<Vertex> subtree = new Vector<>(); public String getName() { return "Create Power Graph"; } public String getDescription() { return "Create Power graph"; } public void action(GraphData graphData) { toInsert.clear(); GraphModel g = graphData.getGraph(); AlgorithmUtils.clearVertexMarks(g); for (Vertex v : g) { subtree.clear(); aStar(v, v, k, g); for (Vertex vv : subtree) vv.setMark(false); } g.insertEdges(toInsert); } void aStar(Vertex root, Vertex v, int k, GraphModel g) { if (k == 0) return; v.setMark(true); subtree.add(v); for (Vertex vv : g.getNeighbors(v)) { if (!vv.getMark()) { toInsert.add(new Edge(root, vv)); aStar(root, vv, k - 1, g); } } } public String checkParameters() { toInsert = new Vector<>(); subtree = new Vector<>(); return (k < 2 ? "K must be larger than 1" : null); } @Override public String getCategory() { return "Transformations"; } }