0
我正在使用gephi在java中实现Bron Kerbosch,但结果中的问题并不正确,给出了列表n1,n2,n3,n4,n5,n6,n7,n8,n9 应打印N2,N3,N5,N7,N8,N9,但它打印 N1 N2 N3 N5 N9 和 所使用的代码是:在java中的Bron Kerbosch实现
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Vector;
import javax.swing.JFileChooser;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import org.gephi.graph.api.DirectedGraph;
import org.gephi.graph.api.GraphController;
import org.gephi.graph.api.GraphModel;
import org.gephi.graph.api.Node;
import org.gephi.io.importer.api.Container;
import org.gephi.io.importer.api.ImportController;
import org.gephi.io.processor.plugin.DefaultProcessor;
import org.gephi.project.api.ProjectController;
import org.gephi.project.api.Workspace;
import org.openide.util.Lookup;
public class maxCliqueTest {
private static Vector<Node> BestFound;
public static Vector<Node> FindMaxClique(DirectedGraph g,Vector<Node> P,Vector<Node> R,Vector<Node> X){
if(P.size()==0 && X.size()==0){
return R;
}
int i=0;
while(i<P.size()){
Node v=P.elementAt(i);
R.add(v);
FindMaxClique(g,Intersection(g,P,v),R,Intersection(g,X,v));
P.remove(v);
X.add(v);
}
return null;
}
public static Vector<Node> Intersection(DirectedGraph g,Vector<Node> T,Node n){
int i=0;
Vector<Node> v=new Vector<Node>();
while(i<T.size()){
if(g.isAdjacent(T.elementAt(i), n)){
System.out.println(T.elementAt(i).getLabel());
v.add(T.elementAt(i));
}
i+=1;
}
return v;
}
public static void main(String[] args) throws IOException {
ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
pc.newProject();
Node[] s = null;
Workspace workspace = pc.getCurrentWorkspace();
JFileChooser fileChose=new JFileChooser();
File fichie;
ImportController importController = Lookup.getDefault().lookup(ImportController.class);
Container container;
FileFilter filter = new FileNameExtensionFilter("graphml fichier", "graphml");
fileChose.addChoosableFileFilter(filter);
int ret = fileChose.showDialog(null, "Open file");
if (ret == JFileChooser.APPROVE_OPTION) {
fichie = fileChose.getSelectedFile();
try
{
container = importController.importFile(fichie);
container.getLoader().setAllowAutoNode(false);
//Force DIRECTED
importController.process(container, new DefaultProcessor(), workspace);
GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel();
DirectedGraph directedGraph = graphModel.getDirectedGraph();
System.out.println(
"Nodes: "
+directedGraph.getNodeCount()+
" Edges: "
+directedGraph.getEdgeCount());
int i=0;
Vector<Node> R = new Vector<Node>() ,X = new Vector<Node>(),P = new Vector<Node>();
for(Node n : directedGraph.getNodes().toArray()){
P.add(n);
}
Vector<Node> j=FindMaxClique(directedGraph,P,R,X);
int k=0;
while(k<j.size()){
System.out.println(j.get(k).getLabel());
k+=1;
}
//Don’t create missing nodes
}
catch(Exception ex) {
ex.printStackTrace();
}
}
}
}
在哪里我做错了什么?一阵搜索,并回答狩猎
文件中使用graph.graphml
<?xml version="1.0" encoding="UTF-8"?><graphml xmlns="http://graphml.graphdrawing.org/xmlns">
<key attr.name="label" attr.type="string" for="node" id="label"/>
<key attr.name="Edge Label" attr.type="string" for="edge" id="edgelabel"/>
<key attr.name="weight" attr.type="double" for="edge" id="weight"/>
<key attr.name="Edge Id" attr.type="string" for="edge" id="edgeid"/>
<key attr.name="r" attr.type="int" for="node" id="r"/>
<key attr.name="g" attr.type="int" for="node" id="g"/>
<key attr.name="b" attr.type="int" for="node" id="b"/>
<key attr.name="x" attr.type="float" for="node" id="x"/>
<key attr.name="y" attr.type="float" for="node" id="y"/>
<key attr.name="size" attr.type="float" for="node" id="size"/>
<graph edgedefault="undirected">
<node id="n1">
<data key="label">n1</data>
<data key="size">10.0</data>
<data key="r">255</data>
<data key="g">0</data>
<data key="b">0</data>
<data key="x">149.36537</data>
<data key="y">36.526653</data>
</node>
<node id="n2">
<data key="label">n2</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">66.46559</data>
<data key="y">-222.63277</data>
</node>
<node id="n3">
<data key="label">n3</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">-342.35153</data>
<data key="y">68.50529</data>
</node>
<node id="n4">
<data key="label">n4</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">-21.092024</data>
<data key="y">115.7537</data>
</node>
<node id="n5">
<data key="label">n5</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">297.1616</data>
<data key="y">-269.26038</data>
</node>
<node id="n6">
<data key="label">n6</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">-162.95857</data>
<data key="y">-384.95587</data>
</node>
<node id="n7">
<data key="label">n7</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">-167.34999</data>
<data key="y">215.14323</data>
</node>
<node id="n8">
<data key="label">n8</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">356.55112</data>
<data key="y">255.99077</data>
</node>
<node id="n9">
<data key="label">n9</data>
<data key="size">10.0</data>
<data key="r">0</data>
<data key="g">0</data>
<data key="b">255</data>
<data key="x">-175.79152</data>
<data key="y">184.92937</data>
</node>
<edge source="n1" target="n2">
<data key="edgeid">0</data>
<data key="edgelabel">e1</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n3">
<data key="edgeid">1</data>
<data key="edgelabel">e2</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n4">
<data key="edgeid">2</data>
<data key="edgelabel">e3</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n5">
<data key="edgeid">3</data>
<data key="edgelabel">e4</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n6">
<data key="edgeid">4</data>
<data key="edgelabel">e5</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n7">
<data key="edgeid">5</data>
<data key="edgelabel">e6</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n8">
<data key="edgeid">6</data>
<data key="weight">1.0</data>
</edge>
<edge source="n1" target="n9">
<data key="edgeid">7</data>
<data key="weight">1.0</data>
</edge>
</graph>
</graphml>
你能描述勒布朗Kerbosch算法对我们来说,懒惰所以用户? –
@LajosArpad该算法在给定图中找到最大集团 – sdx11
你称为集团又如何测量它?你测量节点的数量,顶点的数量,还是你有顶点的权重? –