如何判定接龙有无解?

zzwu 2006-01-26 07:55:43
实践告诉我们,接龙不一定能成功[注],接到后来无法再接下去的情况常常发生.

一副不能接成功的牌玩到后来极让人扫兴,所以,理想的接龙软件,应预先判定
所给的牌是否有解.

请问,如何判断?

[注]我想要证明不是所有初试布局都有解不难.
...全文
827 58 打赏 收藏 转发到动态 举报
写回复
用AI写文章
58 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveCreatesBeauty 2006-03-28
  • 打赏
  • 举报
回复
up
NowCan 2006-03-27
  • 打赏
  • 举报
回复
这并不能作为证明,理论上,不同的随机序列也可能导致相同的开局。
IO_X 2006-03-27
  • 打赏
  • 举报
回复
假定牌集合S={s1,s2,s3,...,sn}
必有n!种排列,伪随机函数算法可是很多的...
zzwu 2006-03-27
  • 打赏
  • 举报
回复
这里有2个问题:

1.利用线性同余法产生的伪随机数是否只要种子不同就一定不同?
2.不同的随机序列是否一定导致不同的开局?

好像都不显然,其中都有疑问.
IO_X 2006-03-26
  • 打赏
  • 举报
回复
伪随机种子不同,则随机序列不同。
zzwu 2006-03-24
  • 打赏
  • 举报
回复
通过上面各位的发言,我认为已经揭示了空档接龙的一些性质:

1.开局采用随机方法生成,肯定没有专门的开局数据库;
2.作者并未对所有开局作过有无解的检测,只凭想当然而断言都有解;
3.所以会极大多数有解、很少无解,完全是因游戏规则决定:有多个缓冲点;

但是,尚未弄清:

4.所有开局是否都不相同?
5.如果算法能保证所有开局都不相同,根据的原理是什么?
NowCan 2006-02-22
  • 打赏
  • 举报
回复
如果程序没错的话,就是证明了。方法据说是A*搜索。
zzwu 2006-02-22
  • 打赏
  • 举报
回复
有意思极了!

不过,穷举算法是否对11982局进行了完整的搜索?

如果已经作过了完整的搜索,那也就是11982局无解的严格证明.
zzwu 2006-02-21
  • 打赏
  • 举报
回复
我想也是使用回溯,不太可能有更巧妙的办法可想了.
实际并不能保证一定有结果,我的看法.
caoze 2006-02-21
  • 打赏
  • 举报
回复

空当接龙趣话

空当接龙可说是最耐玩的Windows小游戏之一,尤其在办公一族中长盛不衰。Win98中的空当接龙有32000局,在空当接龙的帮助文件中,作者 Jim Horne 称:“虽然未经证明,但请您相信:所有的牌局最终都能移开。”事实究竟如何,是一个非常有趣的话题。

如果从空当接龙的第一局开始按顺序攻关,碰到的第一个难局是617局。难度很大的难局是1941局。如果1941局被你攻破,另一个难局10692应该不在话下。但是11982局会让你伤透脑筋。

空当接龙中还有两个隐藏的有趣的选局:分别是-1局和-2局,将这两局调出来,一看就会发现牌局是人为刻意排列的,很有规律。这两局是无解的,当然,这两局也是独立于32000局之外的作者另设的小机关。那么32000局中有没有无解局呢?很多人认为没有,结果被11982局搅得焦头烂额。

据说有人为攻破11982局者设立了10万赏金,但迄今为止,还没有11982的破局纪录。有人专门编程序穷举11982的解法步骤,还有很多人将空当接龙从头到尾玩通,都报告11982局无解。

大致可以确定,空当接龙中,有三局无解,分别是11982,-1,-2。(WinXP中的空当接龙则有一百万关,其中八局无解。)令人迷惑的是,11982局的模样很自然,没有任何特别之处,象极了一副有解的牌,居然无解。

为什么是11982局呢?好事者说,这里面一定隐藏着一个动人的故事,是作者的吉祥数字?或是他的某个收藏的密码?还是情人的**号码?多么浪漫而令人费解的一局呀!

常有人报告说攻破了11982局,其实都是用作弊的手法。首先打开11982局,然后移动红桃2到黑桃3上,随即按F3键退出游戏,但是在选局中仍选11982局,开局后按F10键撤销一步,从这一步玩起,就能解开此局。这样玩仍有相当难度,但能解开,软件的最优解是80步完成。其实最简单的作弊手法是,打开任意一局后,按Ctrl+Shift+F10,弹出窗口后按A,再随便双击某张牌,牌局便应声而解。

有一些软件对空当接龙的牌局进行跟踪破解,如“空当接龙工具”(点击下载 ),可以用多种模式破解牌局,著名的难局1941,几秒内可以解出。破解后可以逐步显示破解过程。有了这个工具,空当接龙就没有过不去的关了。该软件对11982局的破解,大约在尝试了6万种可能性后提示无解;对-1局则在很短时间内提示无解;对-2局的分析时间则相当长。所以11982局是真的无解。

相信你看了以上文章,不会再没日没夜地跟11982局穷耗了。

xuelong_zl 2006-02-19
  • 打赏
  • 举报
回复
再请教zzwu一个问题

我不明白连连看的外挂在寻路时用的是什么算法呢?人玩的时间可以自己选两点

不会是从第一个图片就开始一次一次的使用回溯吧?有什么好的解决方法吗?请指点一下,说得详细一些,小弟才接触算法这些基本的东东
NowCan 2006-02-14
  • 打赏
  • 举报
回复
回复人: shines(郭子) ( ) 信誉:95 2006-02-14 08:13:00 得分: 0


记得以前(记得有5年了)有人用A*算法做过一个空档接龙的求解程序, 优先考虑移动要接的列, 以现在的计算机的速度, 应该不是很难, 但好像的确有无解的开局(记不太清了)

PS: 各位大侠们这么有闲空啊, 俺今天无聊来刷算法版的帖子, 路过~~~


==葛永写的FreeCell2.1,他说可以证明11982,-1,-2是无解局面。如果真如他说,那么一定是完全搜索了。另外,XP的空档接龙好像是100万局,据说有20多个无解局面。

祝大家情人节快乐!
xuelong_zl 2006-02-14
  • 打赏
  • 举报
回复
不过连连看只应考虑初始化时是不是有解就可以了,过程的如何因为自己玩的不好而出现无解情况,就是应该restart
xuelong_zl 2006-02-14
  • 打赏
  • 举报
回复
回复人: zzwu(未名) ( ) 信誉:109 2006-02-08 13:32:00 得分: 0


to xuelong_zl(点雨点[好想村里的MM们............]) :
但我发现,当"连连看"接不下去时,有时屏幕会突然一闪,
将布局改变(图像数目不变),这时就可以继续接下去了.
或许就是为了自动解决"接不通"的问题.
这种情况我已经碰到过2次.

//=======

这个我也遇到过,不过我感觉很不合理,特别是要减生命我就更感觉郁闷,所以才想解决这个问题的
xuelong_zl 2006-02-14
  • 打赏
  • 举报
回复
zzwu,你认为连连看的初始化是否可以借鉴迷宫初始的实现思路呢??

比如用不相交集结构这样的算法,随机合并两个拆点数小于等于是2的元素,来初始化呢??

然后让新的不相交集中的成对元素做相同的标识,来初始化图片??

zzwu 2006-02-14
  • 打赏
  • 举报
回复
如果不要求一定有解,那也好办:逐步减少相邻的或位于四周同侧的对数.
shines77 2006-02-14
  • 打赏
  • 举报
回复
记得以前(记得有5年了)有人用A*算法做过一个空档接龙的求解程序, 优先考虑移动要接的列, 以现在的计算机的速度, 应该不是很难, 但好像的确有无解的开局(记不太清了)

PS: 各位大侠们这么有闲空啊, 俺今天无聊来刷算法版的帖子, 路过~~~
xuelong_zl 2006-02-14
  • 打赏
  • 举报
回复
对,zzwu,正是要保证有解的同时还难解,我才一时想不到好的方法.


如果只想有解,方示还是很多的,可以也增加相同的图片也是一样
zzwu 2006-02-14
  • 打赏
  • 举报
回复
NowCan(城市浪人) :


XP的空档接龙确实让你选1-100万个开局。

52张牌, 有52!种可用的布局,从其中选择100万,比例仍然很小很小。

不过要保证100万种开局一定都不一样,倒不容易。不知道XP是否已经考虑了这一点?


zzwu 2006-02-14
  • 打赏
  • 举报
回复
xuelong_zl:

怎样保证"连连看"有解的问题我原来没有想过,我只发现它很容构造无解的开局。

不过,我现在想,单单为了保证有解,不会很难,例如:把足够多的相同元素对放在一起或放在最外层的同一侧就行了。问题是,不但要有解,同时又要使它比较难解。


加载更多回复(38)

33,025

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧