📅  最后修改于: 2023-12-03 15:24:32.956000             🧑  作者: Mango
在Java中,我们可以使用伪随机数生成器来生成随机无向图。下面我们来看一下具体的实现方法。
我们首先需要定义图的顶点数量和边数量。在本示例中,我们定义顶点数量为 n,边数量为 m。
int n = 10; // 顶点数量
int m = 20; // 边数量
生成边的过程需要用到伪随机数生成器。我们可以使用Java自带的Random类来生成伪随机数。
Random random = new Random();
下面是生成边的代码片段:
List<int[]> edges = new ArrayList<>();
for (int i = 0; i < m; i++) {
int u = random.nextInt(n);
int v = random.nextInt(n);
if (u != v) {
edges.add(new int[] {u, v});
}
}
以上代码的含义为,对于每一条边,我们随机生成两个顶点 u 和 v。如果 u 和 v 不等,则将它们作为一条边存入 edges 中。
由于生成的边是随机生成的,有可能会有重复的边。为了避免出现重复边,我们需要对 edges 中的边进行去重操作。
Set<String> set = new HashSet<>();
List<int[]> result = new ArrayList<>();
for (int[] edge : edges) {
String edgeStr = Arrays.toString(edge);
if (!set.contains(edgeStr)) {
set.add(edgeStr);
result.add(edge);
}
}
以上代码中,我们使用 HashSet 来存储已经生成的边,并对每一条边进行判断,如果该边已经存在于 Set 中,则说明它是重复边,我们就不再将它加入到最终的结果 result 中。
下面是完整的示例代码:
int n = 10; // 顶点数量
int m = 20; // 边数量
Random random = new Random();
List<int[]> edges = new ArrayList<>();
for (int i = 0; i < m; i++) {
int u = random.nextInt(n);
int v = random.nextInt(n);
if (u != v) {
edges.add(new int[] {u, v});
}
}
Set<String> set = new HashSet<>();
List<int[]> result = new ArrayList<>();
for (int[] edge : edges) {
String edgeStr = Arrays.toString(edge);
if (!set.contains(edgeStr)) {
set.add(edgeStr);
result.add(edge);
}
}
System.out.println("生成的边为:");
for (int[] edge : result) {
System.out.println(Arrays.toString(edge));
}
通过以上代码,我们可以在Java中为给定数量的边生成随机无向图。需要注意的是,本示例中生成的图是简单无向图,即不存在重复边和自环边。如果想要生成其他类型的图,还需要针对具体情况进行调整。
另外,需要注意的是,本示例仅仅是演示如何生成随机无向图,对于图的其他操作(如遍历、求最短路径等),需要使用其他算法或数据结构。