广度优先搜索输入

时间:2016-02-19 17:39:33

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

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

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

我不确定如何正确遍历它?一旦我到达Node 1& 2我如何到达其他节点1&列表中还有2个?

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

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

1 个答案:

答案 0 :(得分:1)

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

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

    1. 出队( 0
    2. 检查节点的子节点( 0 )是否尚未访问
      1. 根据您的输入(" 0 1" ),边缘表示其唯一的子项 1 ,因此将 1 放入队列中。
    3. 打印(即 0 )。
    4. 结束循环 端

换句话说。下一次迭代将 1 有两个孩子,即 1(2) 1(4)将所有孩子放入队列并将出列1 并打印。下一次迭代将出现 2 ,有三个孩子,即 2(6) 2(3) 2(7) )将所有孩子放入队列并打印 2 。下一次迭代将出现 4 ,只有单个孩子,即 4(0),但您已打印并访问 0 ,因此只需打印<强> 4

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