当我们知道顶点数

时间:2017-06-28 07:31:18

标签: c# graph

想象一下,我们有4个顶点(1,2,3,4),我以这种方式将它们保存在数组中:

    var vertices = new[] { 1, 2, 3, 4 };
    var edges = new[]{Tuple.Create(1,2), Tuple.Create(2,4), Tuple.Create(4,3), Tuple.Create(4,1), Tuple.Create(3,2), Tuple.Create(3,1) };

现在看起来像这样:

enter image description here

但是如果我有更多的顶点,比如100呢?我应该如何生成它?循环是否是线性的? 如果我使用这样的东西:

 List<Tuple<int,int>> edges = new List<Tuple<int, int>>();

    for (int i=1; i<vertices.Length-1; i++)
    {
        edges.Add(Tuple.Create(i, i+1));
    }

我最终会得到图表的轮廓吗? enter image description here

我无法弄清楚如何制作交叉点,例如1到3,2到4。 或者,如果我的图形宽度为100个顶点,高度为50个顶点,或者不一定是矩形?

如果您需要更多信息,我会添加它。

1 个答案:

答案 0 :(得分:1)

  

我使用这样的东西......我最终会得到图表的轮廓吗?

正确。

  

我应该如何生成它?

如果我正确理解你的问题,你只需要所有可能的顶点组合。这很简单:

List<Tuple<int,int>> edges = new List<Tuple<int, int>>();

for (int i = 1; i < vertices.Length - 1; i++)
{
    for (int j = i + 1; j < vertices.Length; j++)
    {
        edges.Add(Tuple.Create(i, j));
    }
}

换句话说,这只是Handshake Problem的变体。

  

循环是否是线性的?

如上所示,绝对不是。它是O(n ^ 2)。