当前位置: 首页 > 知识库问答 >
问题:

避免在顶点之间创建多条边(java.util、linkedList、Graph)

莫誉
2023-03-14
 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);


        }
}

共有1个答案

吕修伟
2023-03-14

有三种可能:

  1. 生成一个随机边;如果该边存在,则生成不同边;重复,直到有所有需要的边
  2. 预先枚举所有可能的边;从这个集合中随机选择边缘,并在“使用”它们时将它们从集合中删除。
  3. 遍历所有节点,一次一个,生成n输出边,其中n符合您的要求。

在选项3中,如果你的边不是定向的,或者你想避免距离-1循环(A->B和B->a),这个问题稍微复杂一点,但仍然很容易解决。

 类似资料:
  • 我正在尝试编写一个算法,该算法将重建Floyd-Warshall算法中所有顶点对之间的最短路径(如果有,则为最短路径绑定多条路径)。我从这个问题中得到了一些提示:https://stackoverflow.com/a/11371588/7447425 基于此,我修改了Floyd Warshall算法: 该图是边缘列表的形式,例如: 到目前为止,一切似乎都很顺利。 对于路径重建, 但这不管用。那么,

  • 考虑上图。我想要一个小精灵查询,返回所有在它们之间有多条边的节点,如图所示。 该图是使用neo4j cypher查询获得的:MATCH(d:dest)-[r]-(n:cust),其中d,n,count(r)作为常用返回d,n,按常用描述极限5排序 例如:在RITUPRAKA…和Asia之间有8条多条边,因此查询返回了2个节点和边,对于其他节点也是如此。 注意:图中有其他节点,它们之间只有一条边,这

  • 我在R中使用igraph库创建了一个无向鄂尔多斯-仁义网络,它有100个节点,p=0.2: 我还创建了两个空网络: 我根据生成的随机数(0-1之间),从原始网络向net1和net2添加边。如果该随机数在0-0.1之间,则边进入net1,如果在0.1-0.9之间,则边进入net2,如果在0.9-1之间,则边同时进入net1和net2。 下面是我的代码,可以查看原始网络中的所有边缘,并将它们添加到ne

  • OrientDB数据库不仅是一个文档数据库,也是一个图形数据库。 和等新概念用于以图形的形式存储数据。 它在顶点上应用多态性。 的基类是. 在本章中,您将学习如何创建顶点来存储图形数据。 以下语句是创建顶点()命令的基本语法。 以下是有关上述语法中选项的详细信息。 - 定义顶点所属的类。 - 定义存储顶点的集群。 - 定义要设置的字段。 - 定义为字段设置的表达式。 示例 尝试下面的示例来了解如何

  • 我发现,当从DB或任何格式将数据导入到图中时,我需要使用这些键创建边,这些键已经是顶点中的属性。 我如何通过使用这些我已经摄入到图中的FK遍历所有顶点来创建边? 我需要这是可编程的,因为我有很多需要这一步的数据。目前我正在使用Gremlin。Net,因为我使用的大部分代码已经是C# 示例:假设我吞下了一些客户 g.add客户,c_id,product_id 和一些产品 g、 addV(“产品”)。

  • 我有一个加权无向图。给定该图中的两个顶点之间没有路径,我想通过向图中添加边来创建它们之间的路径,尽可能少地增加图的总权重。是否有已知的算法来确定要添加哪些边? 一个类似的问题是,如果我有一个国家道路系统的图表,其中有两个城市彼此无法通过道路进入,我想修建一组最短的新道路来连接它们。它们之间可能有其他城市与两者都没有联系,如果它们存在,我想利用它们。 这里有一个小例子;红色和绿色是我要连接的顶点,黑