想象一下,我们有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) };
现在看起来像这样:
但是如果我有更多的顶点,比如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));
}
我无法弄清楚如何制作交叉点,例如1到3,2到4。 或者,如果我的图形宽度为100个顶点,高度为50个顶点,或者不一定是矩形?
如果您需要更多信息,我会添加它。
答案 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)。