📜  如何在Java为给定数量的边生成随机无向图?(1)

📅  最后修改于: 2023-12-03 15:24:32.956000             🧑  作者: Mango

如何在Java为给定数量的边生成随机无向图?

在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中为给定数量的边生成随机无向图。需要注意的是,本示例中生成的图是简单无向图,即不存在重复边和自环边。如果想要生成其他类型的图,还需要针对具体情况进行调整。

另外,需要注意的是,本示例仅仅是演示如何生成随机无向图,对于图的其他操作(如遍历、求最短路径等),需要使用其他算法或数据结构。