package graphtea.extensions.algorithms; import graphtea.graph.graph.Edge; import graphtea.graph.graph.GraphModel; import graphtea.graph.graph.Vertex; import graphtea.platform.core.BlackBoard; import graphtea.plugins.algorithmanimator.core.GraphAlgorithm; import graphtea.plugins.algorithmanimator.extension.AlgorithmExtension; import java.util.Vector; /** * author: rostam * author: azin */ public class ILU extends GraphAlgorithm implements AlgorithmExtension { public ILU(BlackBoard blackBoard) { super(blackBoard); } @Override public void doAlgorithm() { GraphModel g = graphData.getGraph(); boolean cont = true; int fillin = 0; while(cont) { Vertex v1 = requestVertex(g, "select a vertex"); Vector<Vertex> InV = new Vector<>(); Vector<Vertex> OutV = new Vector<>(); for(Vertex v : g) { if(g.isEdge(v,v1)) InV.add(v); if(g.isEdge(v1,v)) OutV.add(v); } step("All in-edges of the selected vertex would be connected" + "to all out-edges."); for(Vertex iv : InV) { for(Vertex ov : OutV) { if(!g.isEdge(iv,ov)) { g.addEdge(new Edge(iv,ov)); fillin++; } } } step("The selected vertex would be removed."); g.removeVertex(v1); step("The vertex is removed and the number of fillins is" + fillin + "."); if(g.numOfVertices()==0) cont = false; } } @Override public String getName() { return "ILU"; } @Override public String getDescription() { return "ILU"; } }