这篇文章,我想分享一下自己的经验,关于如何快速找到起点。

APK下载链接:​​javascript:void(0)​

规则介绍:

这个游戏是要一笔画完整个图,由于起点为给出,所以需要自己寻找。

如果一开始起点就选错了,那么无论如何都无法过关了。

这个游戏,是难度递增的,可以分成四大类。

第一种,是只有蓝线的(有的上面还有箭头),也就是简单图。

第二种,有了红线(有的上面还有箭头),红线其实就是二重平行边。

第三种,有了传送门,传送门是2个黄点组成的一对。(图中只有1个传送门,也只有2个黄点)

第四种,有了绿线,绿线都是带箭头的,而且其中一端是绿点。每次经过绿点,绿线的方向就会改变。

下面分这四种类型,分别介绍如何寻找起点。

一,简单图

简单图有2种,一种是没有奇点的:

一笔画2 攻略_无向图 一笔画2 攻略_有向图_02

无论是有向图还是无向图,一定是一个闭环,那么任何点都可以用作起点。

另外一种是有2个奇点的:    

2个奇点必定是起点和终点。

一笔画2 攻略_有向图_03

在无向图中,任意一个做起点,另外一个做终点,都可以。

一笔画2 攻略_子图_04     一笔画2 攻略_子图_05

在有向图中,有的像图12一样,2个点都可以作为起点,有的像图14一样,只有1个点能作为起点。

对于有唯一起点的情况,要想找出起点,还需要下面的定理。

定理一:在有2个奇点的有向图中,除了2个奇点之外,所有的点都满足入度==出度,

而这2个奇点中,起点满足入度==出度-1,终点满足入度==出度+1(证明略~~~)

图14中这个定理的使用:

分析点3就可以发现,点3到点2之间的线的方向是2→3而不是3→2,如图。

同理,分析点4可以发现是4→2,分析点5可以发现是2→5。

那么,点2即为起点,点1即为终点。

二,带二重平行边的图

一笔画2 攻略_有向图_06

红线的意思是,这条线必须经过2次,其实也就是二重平行边,1条红边等价于2条平行的蓝边。 

理解什么叫二重平行边之后,问题就可以轻松地等价转化成前面的简单图的问题了。

如图22中,点1和点2是奇点,而且点1的出度至少为2,所以点1是起点,点2是终点。

三,带1个传送门的图

定理二:

对于2个传送门的2个端点,即黄点A和B,A的入度减B的出度一定是0或者1或者是-1

如果是1,那么A是终点,如果是-1,那么B是起点。

对于A和B之外的点,如果是奇点,就一定是起点或终点,对于A和B就不一定了。

定理二的推论:

A和B的度一定相差为2或者1或者0

1,如果相差是2,那么度大的那个点既是起点,又是终点,除了A和B之外没有奇点。

一笔画2 攻略_无向图_07

2,如果相差是1,那么度大的那个点即为起点或终点,除了A和B之外恰有1个奇点,这个点也是起点或终点。

一笔画2 攻略_子图_08

如图33,因为点1的入度至少为2,所以点1是终点,点3是起点。

3,如果相差是0,那么又有2种情况:

(1)除了A和B之外恰有2个奇点,那么这2个点就是起点和终点

一笔画2 攻略_无向图_09

(2)除了A和B之外没有奇点,那么整个图一定是闭环,任何点都可以作为起点。

 一笔画2 攻略_子图_10

四,带绿线的图

绿线本质上是一条有向边,只不过方向不好确定。

所以说,以上提到的所有内容,对于带绿线的图同样成立。对于简单的情况,用上述内容即可解决。

但是,对于大部分情况,上述内容无法得到结果,因为绿线不是无向边,必须按照绿箭头的方向走,而绿箭头的方向却又总是变,所以定量的分析效果不大。

所以接下来,我会列举一些经典的情形,来给出一些方法。实际上,这些方法也可以用到无绿线的图中,效果一样很好。

1,基于闭环的分割(不一定保证对,但目前还没有出错过,而且有奇效)

把图分割成2个子图,一个图是闭环(多个闭环合起来还是闭环),另外一个图包含绿线。

让包含绿线的图尽量简洁,然后优先解决这个图,最后只要解决这个闭环就可以了。

例1:

一笔画2 攻略_有向图_11一笔画2 攻略_有向图_12

例2:

一笔画2 攻略_有向图_13一笔画2 攻略_子图_14

例3:

一笔画2 攻略_无向图_15  一笔画2 攻略_子图_16

(红线不是闭环,但是红线加闭环还是闭环)

例4:

一笔画2 攻略_有向图_17  一笔画2 攻略_有向图_18

例5:

一笔画2 攻略_子图_19 一笔画2 攻略_无向图_20

对于图133,有2个点是奇点,但是不知道哪个是起点。

定理三:

如果一个图可以分成2个子图,这2个子图只有2个公共点(都不是黄点),而且这2个点就是起点和终点,那么这2个子图一定有1个是闭环。

根据这个定理,图133虽然有2个黄点,但是起点和终点都不是黄点,而且可以分成上下2个子图,所以上面的子图一定是闭环,所以只需要先解决下面的子图。

一眼看过去,很难看出上面的子图是闭环,不过确实是闭环。

2,完全分割图

随便命名的,就是指这种如果不考虑传送门的效果的话,2个部分完全分割开来的图。

一笔画2 攻略_无向图_21  一笔画2 攻略_有向图_22

如果其中有1个部分是不自相交的闭环的话,那就太简单了,起点一定在另外1个部分。

(考虑到整个图为闭环的情况,更严谨的说法应该是,起点一定可以是另外1个部分上面的点)

在另外1个部分找起点的时候,可以忽略掉传送门,这样就很简单了。

3,对称性

一笔画2 攻略_有向图_23一笔画2 攻略_有向图_24

这2个图都有着比较强的对称性,但不是完全对称。

2个都是,2个奇点都可以作为起点

4,基于有向小闭环的消去原理

其实这个和基于闭环的分割差不多,一步步挖掘出小闭环,必须是有向的。

一笔画2 攻略_有向图_25   一笔画2 攻略_无向图_26

图109可以分成5个子图,4个有向小闭环都消去之后,就只剩1条简单的路径了。

5,基于传送门的分割

根据传送门,分割成若干块,每一块都相当于若干条连接2个传送门的线段。

一笔画2 攻略_子图_27  一笔画2 攻略_子图_28

很明显,她们是有主次之分的。

一般来说,主分区只有1个,其他都是次分区。

次分区的特点很明显,简单,无限制或者限制很少(限制主要指箭头)。

当然,还有一种特殊的情况,箭头特别多,但是全部指向同一个传送门,这也是一种很有趣的闭环。

最重要的是,次分区没有奇点,可以构成闭环。

这样看起来,每个分区都可以轻松解决掉。

主分区是一条路径,除了起点和终点之外,至少有1个点是传送门,所以主分区是由2部分构成,起点→传送门,传送门→终点。

所以完整的路径是:起点→传送门,第一个次分区,第二个次分区......最后一个次分区,传送门→终点。

6,基于邻居的出度和入度估计法(类似贪心算法)

我之所以总结出这样一个方法,实在是因为上面的方法对下图120几乎无效,图120实在是难的离谱。

点和边的位置关系可以分4类:

第一种,点是边的2个端点之一

第二种,点和边的2个端点都是邻居

第三种,点和边的2个端点,一个是邻居,一个不是邻居

第四种,点和边的2个端点都不是邻居

基于邻居的出度和入度估计法:只考虑和奇点形成第一种或者第三种位置关系的有向边,计算所有这样的边对奇点的入度或者出度的贡献的总和,然后比较2个奇点得到起点和终点

一笔画2 攻略_无向图_29

首先,点1和点2是奇点,ABCD四条边都是有向边。

对于点1,只考虑ABC,对于点2,只考虑D

然后计算贡献

对于点1    A:入度+2    B:出度+1     C:出度+1    合计:贡献为0

对于点2    D:入度+2    合计:贡献为入度加2

所以,2是终点,1是起点。 

注意:当2个奇点的计算值相差为2或者超过2,往往非常可信,相差为1甚至0的话就不是特别可信了。

这里面还要注意绿线的问题,如果绿线的方向可以预先确定的话,绿线也可以参与计算贡献,但是如果绿线的方向无法确定,或者特别麻烦,懒得分析这个,那绿线可以不参与计算贡献。

再看2个例子:

一笔画2 攻略_无向图_30

很明显点1和点2是起点和终点。

点1的计算值为0,点2的计算值为出度加2,所以点2为起点。

一笔画2 攻略_无向图_31

很明显点1和点2是起点和终点。

点1的计算值为0,点2的计算值为入度加1,所以点1为起点。

7,优先级原则

原则一,对于能够确定方向的绿线,优先干掉绿线

原则二,优先级,有向红边>有向蓝边>红边>蓝边

8,基于绿线的分割

有些图是由子图+绿线+子图构成的,即绿线是连接2个子图的唯一的边。

这里的子图,指的是不包含传送门或者包含2个传送门的图。

一笔画2 攻略_子图_32   一笔画2 攻略_子图_33   一笔画2 攻略_无向图_34   一笔画2 攻略_无向图_35

开局的时候绿箭头的方向一定就是最后通过绿线的方向,所以绿点所在的那个子图一定包含起点。

(这个子图包含绿点)