【发布时间】:2017-08-25 05:16:39
【问题描述】:
这段代码正在创建一个带有随机边的随机“图”,但在某些情况下,这部分代码:
for(int i=0;i<k;i++) {
int numero2 = (int) (Math.random() * k);
int numero3 = (int) (Math.random() * k);
g.addEdge(numero2, numero3 );
}
不会避免在节点之间创建两条或三条边,这是错误的,因为它不模拟常规图。为了完全避免在两个顶点之间创建多个边,我应该在代码中添加什么样的条件?
提前致谢。特别是如果有答案甚至更好,我的问题的一个很好的答案。
完整代码为:
import java.util.*;
import java.util.Random;
class Graph{
class Edge{
int v;
public Edge(int v){
this.v=v;
}
@Override
public String toString(){
return "("+v+")";
}
}
List<Edge> G[];
public Graph(int n){
G=new LinkedList[n];
for(int i=0;i<G.length;i++)
G[i]=new LinkedList<Edge>();
}
void addEdge(int u,int v){
G[u].add(0,new Edge(v));
}
@Override
public String toString(){
String result="";
for(int i=0;i<G.length;i++)
result+=i+"=>"+G[i]+"\n";
return result;
}
}
public class Graph01 {
public static void main(String[] args) {
int k = (int) (Math.random() * 5) + 5;
Graph g;
g = new Graph(k);
for(int i=0;i<k;i++) {
int numero2 = (int) (Math.random() * k);
int numero3 = (int) (Math.random() * k);
g.addEdge(numero2, numero3 );
}
System.out.println(g);
}
}
【问题讨论】:
-
与您的问题无关,但存在图形库,因此您无需重新发明轮子。例如JGraphT.
标签: java