LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3982|回复: 6

[算法]连连看算法

[复制链接]
发表于 2006-1-3 09:10:39 | 显示全部楼层 |阅读模式
我想知道有更好的算法吗?
此法只是能解决问题,并不是好的解(我认为)。


  1. /*
  2. 连连看:算法一种

  3. author: wide288
  4. Date: 2006/1/3
  5. */

  6. 把一个小图片看成由四面组成的东西。如:

  7. AAAA
  8. BNND
  9. BNND
  10. BNND
  11. BNND
  12. CCCC

  13. 把棋盘看成由左下角是原点的直角坐标系。坐标值是(0,0)(x,y) x 行号; y 列号;

  14. 首先判断点击两个小图片时A面是否连通:
  15. 例如:两个小图片的坐标值分别为:(8,4)有子;(6,8)有子;

  16. 首先比较 x 的大小,记录大的值
  17. 大值加一,看是否从4列能通到8列。如果通就消去两子,如果不通行值加一。再判断通不通。
  18. 直到行号为终时。

  19. /************************************/

  20. 其次,D 面判断:
  21.     还是用A面判断的例子。
  22.     列值比较大小,记录较小的。
  23.     列值加一,判断是否能通到另一值的行上,如果不能列值加一,如果能判断此行是否通。
  24.     不通列值还是加一,如果通消去。
  25.     列值一直加一,直到列值为8,还不通时。此面不通不能消。返回值。

  26. /************************************/

  27. 其次  B 面判断:
  28.     同D 面。

  29. /************************************/

  30. 最终 C 面判断:
  31.     同A 面。

  32. /*************************************/

  33. 每个子都要进行四面的判断才能判断此子是否通。

  34. /*** The End **/

  35.    
复制代码
发表于 2006-1-3 10:35:21 | 显示全部楼层
我想还可以有这样的算法~~~

将一个图象作为一个点,这样两个点总可以画一个井子~~每个点都作为原点绘制直角坐标系~~

然后横向和纵向用直线去扫描~~~判断是否存在一个可以将两个坐标系的任意平行坐标轴联接起来的水平直线或垂直直线~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-1-3 13:05:09 | 显示全部楼层
你的算法,我感觉实现起来和我的一样。呵呵
回复 支持 反对

使用道具 举报

发表于 2006-1-3 13:19:14 | 显示全部楼层
呵呵,本身原理是一样的~~~
我只是把你的四个边简化成了两条线,用扫描线的方式来代替你的算法中的点定位~~~

不过速度不知道哪个好,我只是觉得这样算法理解起来每那么复杂~~~
回复 支持 反对

使用道具 举报

发表于 2006-1-3 13:25:56 | 显示全部楼层
忘了说了,还有一种方法,就是图的最短路径~~然后计算路径的节点数~~连连看要求节点数小于等于2,为有效路径~~

这个方法应该是多数连连看用的方法~~只要在游戏最初将无向图正理成树,玩家每次的操作最终都是对这个树的修剪~~即快又好~~
回复 支持 反对

使用道具 举报

发表于 2006-1-5 08:47:13 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2006-1-5 09:22:02 | 显示全部楼层
连连看是什么?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表