在图论中,仙人掌是一个连通图,因此图中任何不同的两个简单循环最多共享一个顶点。
这是一个仙人掌,带有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
?