我正在为以下用例搜索算法或算法的想法:
有向图由多个顶点组成其中一些顶点用值(如数字)进行注释,并且没有父顶点(前置)。所有其他顶点都表示操作只有父顶点(前置顶点)的所有注释值都已知时,才能执行操作。然后操作的结果或值存储在顶点中。
我的解决方案:
存储集中至少有一个父顶点(前置顶点)的所有顶点
当集合不为空时:
从集合中获取下一个顶点
检查所有父顶点(前置顶点)的值是否已知
如果所有值都已知:
从集合中移除顶点
执行操作
将操作结果存储在顶点中
循环(转到2.)
else:循环(转到2.)
我的问题:我认为这个解决方案的想法可以工作,但它不是有效的(特别是对于大型图形结构)。
有没有更有效的方法来解决这个问题?
最佳答案
有一些可能性可以避免无目的地重新检查顶点,例如:
初始化一个整数数组,为每个顶点存储父节点的数目。
初始化一组父节点为0的顶点(可以与步骤1同时完成)。
直到该集合为空:
从该集合中获取一些顶点并对其进行处理。
对于从a
到顶点a
的每条边,减小顶点b
的父计数如果计数达到0,则将b
添加到准备处理的顶点集。
关于algorithm - 有效的图遍历算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46961810/