1

我在遍历以下类型的图表时遇到问题。

要遍历的图形

  • 在每个节点上可能有多个输入和输出。
  • 每个输出可以指向多个输入(例如 A 的第三个输出到 C 和 D)
  • 在每个节点上,根据输入中提供的值进行一些计算。输出的结果提供给其他节点的输入。
  • 要从一个节点遍历到下一个节点,我必须知道所有输入的值。

想到这个遍历:

  • 在 A 处,使用唯一的输入来计算所有的输出
  • 使用 A 的第一个输出从 A 移动到 C。
  • 在 C,我们不知道另一个输入,所以回溯到 A。
  • 在 A 处,使用第二个输出到达 B。
  • 在 B,我们没有所有的输入,所以回溯到 A。
  • 在 A 处,取第三个输出并到达 B。
  • 在 B,现在我们有所有的输入来计算输出。
  • 在 B,通过第一个输出到达 C。
  • 在 C 处,我们拥有所有输入,因此进行计算并到达 E。
  • 等等

那么您认为哪种遍历算法在这种情况下效果最好。BFS 可能不起作用,因为在我的情况下,当我到达一个节点时我不知道所有输入,并且不可能回溯。

我必须在 C# 中实现它。

4

1 回答 1

4

主意:

使用广度优先搜索,但也要对每个节点进行计数(或者类似地,输入列表)。

当你访问一个节点时:

  • 增加它的数量
  • 如果计数小于它具有的传入边数,则不做任何事情
  • 否则,照常处理节点

你的例子:

候选人: A
我们处理 A。

候选者:C、B、D
我们访问 C,但不将其处理为它的计数 = 1 < 2 = 传入边。

候选人:B,D
我们访问 B 并处理它。

候选者:D、C、E、D
我们访问 D,但不处理它,因为它的计数 = 1 < 2 = 传入边(第二条边尚未处理)。

候选人:C、E、D
我们访问 C 并处理它。

候选者:E,D,E
我们访问 E,但不处理它,因为它的计数 = 1 < 3 = 传入边(第二条和第三条边尚未处理)。

候选人:D,E
我们访问 D 并处理它。

候选人:D、E、E
我们访问 D 并处理它。

候选者: E, E
我们访问 E,但不处理它,因为它的计数 = 2 < 3 = 传入边(第三条边尚未处理)。

应聘者: E
我们访问 E 并处理它。

于 2013-10-22T14:32:47.527 回答