![](/img/trans.png)
[英]Why java.util is accessible from more than one module : <unnamed>, java.base
[英]Avoid creating more than one edge between vertices (java.util, linkedList, Graph)
这段代码正在创建带有随机边的随机“图形”,但是在某些情况下,这部分代码是:
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);
}
}
有三种可能性:
n
传出边,其中n
是您喜欢的。 在选项3中,如果您的边缘未对准,或者您想要避免距离1循环(A-> B和B-> A),则问题会稍微复杂一些,但仍可轻松解决。
这些选项均不能生成无周期且距离大于1的图形。这样做将需要更复杂的编码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.