【问题标题】:Breadth First Search input广度优先搜索输入
【发布时间】:2016-02-19 17:39:33
【问题描述】:

我不确定如何处理为广度优先搜索作业提供的输入。我们假设遍历一个图并输出遍历的顺序。这是有向边的列表:

0 1
0 2
2 6
6 1
7 9
4 0
6 4
6 3
9 3
6 2
8 6
1 4
5 6
1 2
6 5
2 3
2 7
5 7
9 0

遍历:0 1 2 4 6 3 7 9 5

我不确定如何正确遍历它?一旦我到达节点 1 和 2,我如何到达列表中更靠后的其他节点 1 和 2?

我知道我必须使用单独的列表来跟踪节点(这是一个单独的问题)但是 最好先订购清单吗?

并不是真正寻找代码只是一个起点,但如果您想用代码示例来回答,我必须使用 C++ 中的循环链表。

【问题讨论】:

    标签: c++ graph-algorithm breadth-first-search


    【解决方案1】:

    如果要使用 BFS 进行遍历,则需要使用队列结构: 例如:

    • 获取第一个节点 (0)。
    • 将 (0) 节点放入队列。
    • 重复这个过程,直到队列不为空。

      1. 出队 (0)
      2. 如果尚未访问,则检查节点 (0) 的子节点
        1. 根据您的输入 ("0 1"),边表示其唯一的孩子是 1,所以将 1 放入队列中。
      3. 打印(即0)。

      结束循环 结束

    换句话说。下一次迭代将是 1 有两个孩子,即 1 (2)1 (4) 将所有孩子放入队列并将 1 并打印。下一次迭代将是,使 2 出队,有三个孩子,即 2 (6)2 (3)2 (7 ) 将所有孩子放入队列并打印 2。下一次迭代将使 4 出队,只有一个孩子,即 4 (0) 但您已经打印并访问了 0,所以只需打印 4。

    你可以使用这个queue 结构。 对于输入,您可以使用链接列表、数组或结构。

    【讨论】:

    • 感谢您的回复!否则,我无法想象我将如何跳到正确的孩子那里。例如,当我将 2 出列时,我怎么知道 37 是孩子,因为它们更远?我现在已经使用链表将所有内容放入队列中,它看起来像这样 0102266179... 那么最好先重新排序列表吗?
    • 对输入图使用结构而不是链接列表,[链接(stackoverflow.com/questions/18006755/…)。类似的东西
    • 如果你检查你的输入,你不需要订购任何东西,每个节点都有子节点意味着链接列表必须指向子节点。但单个节点有多个孩子。并且链接列表不能指向多个子节点。
    • 或者,如果您仍想使用 llinklist,请将节点值放入链接列表值中,并将子节点作为指针。全部存储,检查所有节点值是否相等,表示 2 然后将指针节点排入队列
    猜你喜欢
    • 2011-05-12
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多