回 帖 发 新 帖 刷新版面

主题:(连连看路径的判定)如何用最快的方法判定可通路径?

连连看大家都玩过,就是一个N×M板上,每个格子都有一个属性,每次可以消去两个格子。
这两个格子必须符合以下3条:
(1)两个格子的属性必须相同。
(2)两个格子之间有路径。
(3)路径的转折点不能多于K个。
其中(2)、(3)的判定比较难,我有一种方法,假设目前的板是这样的:
                 
                   X  1  2  2  1  3  3  
                   3  2  3  2  3  4  4  
                   X  3  1  2  1  1  3  
                   4  3  2  1  2  4  2  
数字表示属性,X表示已消去的格子。
把周围加上一圈X:
                X  X  X  X  X  X  X  X  X
                X  X  1  2  2  1  3  3  X
                X  3  2  3  2  3  4  4  X
                X  X  3  1  2  1  1  3  X
                X  4  3  2  1  2  4  2  X
                X  X  X  X  X  X  X  X  X
然后用<路径搜索-迷宫2-转弯次数>的方法就可以判定。

然而,这种方法太慢了。

我觉得还有更快的方法,大家能帮帮我吗?

回复列表 (共6个回复)

沙发

     |
     |         |
-----A---------+-------+ C
     |         |       |
     |         |       |
     |         |       |
-----+---------B-------+ D  
     |         |
               |


1. 在同一条直线上
2. 某条直线有交叉点
3. 平行线有通道

板凳

怎么判断平行线有通道呢?

3 楼

C,D 点在同一Y轴上
判断是否存在通道。

可以这样子做
1. 获得A所在的同X轴或同Y轴的所有点(集合AA/十字线)
2. 获得B所有的同X轴或同Y轴的所有点(集合BB/十字线)
3. 有方向地从近到远遍历集合AA,寻找集合BB中是否存在同X轴/或同Y轴的点
   4. 两点间是否全空 - 获得路径。

4 楼

我不懂,能不能说清楚点??

5 楼

11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 [color=0000ff]33[/color] 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 [color=0000ff]79[/color] 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100

函数是否能连(A点, B点)
A点的坐标是 3, 3  (以竖十横个为基准,只是一个概念问题,暂别论公认的XY轴)
跟A点同轴的有:
竖线:  13 23 33 43 53 63 73 83 93
横线:  31 32 33 34 35 36 37 38 39
以这个十字线为集合E(A)

跟B点同轴的有:
竖线:  19 29 39 49 59 69 79 89 99
横线:  71 72 73 74 75 76 77 78 79
以这个十字线为集合E(B)

遍历(应该优化从点往外延伸,从而找到最短路径才对,这里暂不讨论)
从E(A)开始  13
到E(B)里找有没有同行或同列的点:可以找到: 19,73
  检查13-19,13-73之间是否空位,能否相通,调用函数通道检查(点1,点2)

如果不符条件,检查集合E(A)的下一个点.............全部点都检查完了没通道就是没有路径.



在一个平面里,如果要做像连连看这样的游戏,
很有必要预先检查并保存路径,一点即能知道结果,否则点了再去检查,就晚了点.

6 楼

还要补充一点,十字线不能跨越实点.

我来回复

您尚未登录,请登录后再回复。点此登录或注册