是仙人掌吗?


23

在图论中,仙人掌是一个连通图,因此图中任何不同的两个简单循环最多共享一个顶点。

这是一个仙人掌,带有3个简单的虚线框。

仙人掌图

下图类似于上图,但不是仙人掌,因为用红色标记的两个顶点由两个简单的循环共享。

不是仙人掌图

事情可能会变得有些棘手,例如下图:

也不是仙人掌图

可能看起来像仙人掌,但事实并非如此。可以通过突出显示以下周期来表明这一点:

突出周期

该循环与图中许多更明显的循环共享一个以上的点。

定义

  • 连通图是这样的图:在任意两个顶点之间至少存在一条路径。

  • 一个简单的循环是图形上一条路径,该路径在相同的顶点处开始和结束,并且访问一个顶点不超过一次。

  • 简单图是无向的,无权的图,因此没有一个顶点通过一个以上的边彼此连接,并且没有顶点与其自身连接。简单图是图的最基本类型,也是大多数人说图时的意思。

任务

以一个简单的图作为输入,并确定它是否是仙人掌图。您应该输出两个不同的值,一个为True,另一个为False。您可以采用您认为合适的任何格式输入。

这是因此您应尽量减少答案的字节数。

测试用例

测试用例作为邻接矩阵


您能看看我的解决方案,让我知道它是否有效吗?我跌倒了,因为显而易见的模式太明显了,我错过了一些东西。
毛茸茸的

@Shaggy我看不懂JavaScript,如果您能解释一下,我可能会读。
小麦巫师

我可以试试。我正在检查2件事情:1)是否e包含正好一个元素并且v包含正好2个AND v等于第一个元素e?2)OR v等于e?中每个元素的第一个元素的并集。第二测试情况下通过第一检查(v=[1,2]=e[0]=[1,2]),而另一个测试用例应该是真实的匹配第二,例如壳体4: v=[1,2,3,4,5,6]=[e[0][0],e[1][0],e[2][0],e[4][0]]=[1,2,3,4,5,6]
毛茸茸的

@Shaggy这不起作用,例如提供的第一个图表失败。 console.log(f([1,2,3,4,5,6,7,8,9,10,11,12,13])([[1,2],[1,3],[3,4],[2,4],[3,5],[5,6],[6,7],[7,8],[8,5],[7,9],[9,10],[10,11],[11,7],[8,12],[8,13]]))
小麦巫师

应该返回true还是false
毛茸茸的

Answers:


9

Mathematica,62个字节

Sort@#==#⋃#&[Join@@FindCycle[#,∞,All]]&&ConnectedGraphQ@#&

检查:(find all cycles, there are no duplicate edges)(The graph is a connected graph)


1
g应该是#吧?
ngenisis

6
所以你告诉我没有isCactus内置的?我很失望。
亚伦

有人应该写一个。
Draco18s

您应该将Mathematica Simplified作为单独的答案。
mbomb007 '17

3
@Aaron这将是CactusQ如果它存在,我相信。
NieDzejkob
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.