如果图形中存在彼此之间的路径,则有向图中的两个不同的顶点将牢固连接。图的强连接组件是图的子集,以使子集中的每对不同的顶点都牢固连接,向子集中添加更多的顶点会破坏此属性。
您面临的挑战是将图分离为其紧密连接的组件。具体来说,您必须输出图中的所有SCC。
输入/输出:
作为输入,您可以使用有向边列表,邻接列表,邻接矩阵或任何其他合理的输入格式。询问您是否不确定。您可以假设图形没有完全断开的顶点,并且不存在自身边,但是您可以不做任何进一步的假设。您也可以选择将顶点列表以及顶点数量作为输入。
作为输出,您必须给出顶点的分区,例如顶点列表的列表(其中每个子列表是一个紧密连接的组件),或者给出顶点的标签(其中每个标签对应于一个不同的组件)。
如果使用标签,则标签必须是顶点或连续的整数序列。这是为了防止将计算拖到标签中。
例子:
这些示例获取边的列表,其中每个边从第一个条目指向第二个条目,并输出分区。您可以自由使用此格式或其他格式。
输入在第一行,输出在第二行。
[[1, 2], [2, 3], [3, 1], [1, 4]]
[[1, 2, 3], [4]]
[[1, 2], [2, 3], [3, 4]]
[[1], [2], [3], [4]]
[[1, 2], [2, 1], [1, 3], [2, 4], [4, 2], [4, 3]]
[[1, 2, 4], [3]]
[[1, 2], [2, 3], [2, 5], [2, 6], [3, 4], [3, 7], [4, 3], [4, 8], [5, 1], [5, 6], [6, 7], [7, 6], [8, 7], [8, 4]]
[[1, 2, 5], [3, 4, 8], [6, 7]]
评分和限制:
一如既往,禁止出现标准漏洞。此外,禁止专门处理强连接组件的内置程序。
根据提供的示例,解决方案应在不超过一个小时的时间内运行。(这是为了防止缓慢的指数解,仅此而已。)
这是代码高尔夫。最少的字节数获胜。
8
是该组件中没有,[3,4]
因为它不能6
同时7
(每个都不能到达)。