我正在尝试使用队列实现BFS算法,我不想为了学习目的寻找任何在线代码。我正在做的只是遵循算法并尝试实现它。我有一个关于Adjacency矩阵的问题(图表的数据结构)。
我知道一个常见的图形数据结构是邻接矩阵。所以,我的问题是,我是否必须与BFS算法一起实现邻接矩阵,否则无关紧要。
我真的很困惑。 困扰我的一件事,图表的数据,如果没有数据结构,应该存储这些数据?
此致
答案 0 :(得分:2)
广度优先搜索假设您有某种方式来表示您正在使用的图形结构,其效率取决于您所拥有的表示形式的选择,但您并不限制使用邻接矩阵。 BFS的许多实现具有以某种方式隐式地表示的图形(例如,作为存储迷宫或某种游戏的2D阵列)并且工作得很好。您还可以使用邻接列表,这对我们在BFS中特别有效。
您要编写的特定代码将取决于图表的表示方式,但不会因为单向操作而受到限制。选择最适合您应用的内容。
答案 1 :(得分:0)
选择数据结构的最佳方式是操作。有了完整的操作列表,请评估对问题很重要的标准:空间,速度,代码大小等。
对于BFS,操作非常简单:
Set<Node> getSources(Graph graph) // all in graph with no in-edges
Set<Node> getNeighbors(Node node) // all reachable from node by out-edges
现在我们可以用n =节点数来评估图数据结构选项:
聪明就是在构建图形时保持设置的源,因此成本由边插入分摊。即,在创建节点时,将其添加到源列表,因为它没有外边缘。在添加边缘时,从源集中删除to-node。
现在,您可以根据运行时间做出明智的选择。为空间,简洁性或其他任何考虑因素做同样的事情。然后选择并实施。