【问题标题】:Randomly Connected Graph Generator [closed]随机连接图生成器
【发布时间】:2016-12-30 22:52:42
【问题描述】:

我试图通过随机连接 N 个节点来生成一个简单的图形。我正在寻找有效的算法来做到这一点,就像这样:

  • 输入:
    • N节点数
    • EN-1N(N-1)/2 的边数
  • 输出:具有 N 个顶点和 E 条边的简单连通图

【问题讨论】:

  • 问题出在哪里?有哪些统计属性?
  • 问题是我正在寻找有效的算法来做到这一点,如下所示:输入-N-节点数-E-从(N-1到N(N-1 )/2) 输出:具有 N 个顶点和 E 条边的简单连通图
  • @darksphere 问题旁边有edit 按钮-请检查并更新帖子的要求,而不是将其添加为评论(由于缺乏经过验证的研究,这仍然不足以避免投票,但至少帖子会类似于合理的问题)
  • 如所问,您的问题充其量是过于宽泛,最坏的情况是不包含足够的信息来了解您真正想要做什么。 也许你可以在这里找到一些有用的信息:en.wikipedia.org/wiki/Maze_generation_algorithm。 IE。基本算法生成的类型迷宫本质上是一个随机生成的图。

标签: c# algorithm random graph


【解决方案1】:

创建一个N 节点数组。 Fisher-Yates shuffle 数组。扫描数组并为数组中相邻的每对节点创建一条边。结果是一个带有N-1 边的连通图。

如果附加边的数量很少,那么你可以随机添加边,直到你有足够的边。否则,创建一个未使用边的数组,Fisher-Yates 打乱数组,并从数组中取出第一个 (E - (N-1)) 边。

【讨论】:

    【解决方案2】:

    这是一个非常简单的算法,它随机地将每个节点与随机数量的其他节点连接起来。

    void CreateRandomGraph(IList<Node> nodes, int maxConnections)
    {
        var rnd = new Random();
    
        foreach (Node node in nodes)
        {
            int numConnections = (int)(rnd.NextDouble() * maxConnections);
            for (int i = 0; i < numConnections; i++)
            {
                //Find a random node to connect to
                int idx = (int)(rnd.NextDouble() * nodes.Count);
                node.ConnectTo(nodes[idx]);
            }
        }
    }
    

    【讨论】:

    • 这根本不能回答问题 - 基于当前文本或帖子 OP 正在寻找连通图 - 添加随机边并不能保证该属性。
    猜你喜欢
    • 2017-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多