0

好吧,我不是在寻找如何在 2d 图形上绘制项目,它只是预期输出需要的图形表示

我有一个类似的清单

a=[]
b=['c','d','e']
c=['a','b','d']
d=['a']
e=['b','a']
l=['g','r','p']
g=['r']
r=['g']
p=['l']

现在从上面很明显 b 指向 c , d ,e
a,b,c,d 是紧密相连的,而 l,g,r,p 是相连的,
谁能告诉我一个算法(保留 2d 图片注意)如何将这些相似的项目一起表示。

以上只是一个例子。该列表将被动态创建

4

2 回答 2

2

你遇到过Graphviz吗?它具有用于各种不同形式的图形布局的算法,我想这些算法可以很好地布置上面的小示例。它还包括一些简单的 GUI,让您可以试验它支持的不同布局。

编辑:回应一些澄清:

如果你需要在你的图中找到密集的子图,即使它是完全连接的,那么你正在寻找在网络中找到社区的算法。在本文中可以找到一个最近开发的算法在大图(200 万多个节点,代表一个社交网络)上有效执行此操作的示例。

于 2012-06-21T07:40:44.000 回答
1

只是为了扩展亚历克斯的答案,这里是 graphviz 用于您的图表的示例:

图.点:

digraph G
{
  b -> c;
  b -> d;
  b -> e;
  c -> a;
  c -> b;
  c -> d;
  d -> a;
  e -> b;
  e -> a;
  l -> g;
  l -> r;
  l -> p;
  g -> r;
  r -> g;
  p -> l;
}

Graphviz 的输出:

示例图

如果您只想知道图中的集群是什么而不绘制它,只需使用此算法即可。

于 2012-06-21T07:59:56.063 回答