【问题标题】:how a graph can be implemented using adjacency lists/sets. How does it work for directed graphs? Undirected graphs? Weighted graphs?如何使用邻接列表/集合来实现图形。它如何用于有向图?无向图?加权图?
【发布时间】:2016-11-27 15:42:17
【问题描述】:

您能否给我一些线索,说明如何使用邻接列表/集合来实现图形以及它是如何工作的 有向图?无向图?加权图?

【问题讨论】:

  • 最好问一个具体的问题。例如:“如何使用 Java 中的邻接表或集合来实现有向图”?

标签: java list graph set


【解决方案1】:

考虑一个像这样的有向无环图:

1->2 
1->3 
2->4 
2->5 
3->6 
3->7

另一种查看方式是:

        1
      /   \
    2       3
  /   \   /   \
 4     5 6     7

这实际上只是一棵小二叉树。邻接表表示形式如下:

1 -> {2, 3}
2 -> {4, 5}
3 -> {6, 7}

因此考虑这可能是指向整数集的整数 HashMap。

现在考虑原始图是无向的,也就是说有父指针。

1<->2
1<->3
2<->4
2<->5
3<->6
3<->7

现在表示需要更多条目:

1 -> {2, 3}
2 -> {1, 4, 5}
3 -> {1, 6, 7}
4 -> {2}
5 -> {2}
6 -> {3}
7 -> {3}

让我们回到图形的有向版本并对其加权:

权重是元组中的第一个条目,子元素是第二个条目。所以它看起来像
Parent-&gt;(Weight, Child)。

1->(.9,2) 
1->(.1,3) 
2->(.9,4) 
2->(.1,5) 
3->(.5,6) 
3->(.5,7)

所以 90% 的时间我们从 1-&gt;2 开始,然后 90% 的时间我们会从 2-&gt;4 开始。

表示看起来与有向图非常相似:

1 -> {(.9,2), (.1,3)}
2 -> {(.9,4), (.1,5)}
3 -> {(.5,6), (.5,7)}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多