我创建了一个类,它接受一个有向图,该图中的一个顶点,并输出一个可接受的顶点序列,以通向该顶点。
。
- A - B>
- C ->
- B - D>
- C - D>
顶点D的两个可能序列是:
- -> B -> C> D
- -> C> B -> D
现在,我需要设计一个测试来确定我的程序给出的解决方案是否正确。
任何想法?
您可以使用基于圈复杂度的算法来计算应该找到的路径数量,这将是一个很好的完整性检查-特别是如果您有一个非常大的图,获得正确的路径数量将令人放心(尽管显然不能保证路径本身是正确的!)。从广义上讲,它是边的数量减去节点的数量——你会在维基百科页面上看到细微的差别。
你的问题很普遍。基本上有两种相似且简单的方法来处理它:
-
将节点序列放入集合中,检查集合大小,是否包含所有序列
-
根据一些已知的算法对序列进行排序(例如,通过比较一个节点接着另一个节点)。
在Java中这意味着:
-
为节点序列实现
equals
和hashCode
(如果这类似于List<Node>
,则为Node
实现equals
和hashCode
),并将它们放在HashSet
中。然后简单地检查集合是否有正确的大小和包含两个路径。 -
使节点序列为
Comparable
并排序。然后顺序总是已知和固定的。在您的情况下,只需逐个比较相应的节点