从拼图游戏开始(三)_可行解的讨论
来源:互联网 发布:适合数据分析的电脑 编辑:程序博客网 时间:2024/05/21 21:34
讨论一下拼图游戏(算法中的名称是15puzzle)中可行解的问题,实际上随机生成的15puzzle大约有%50是无解的,本文将就随机生成的谜题的可解性加以讨论。
设有如下矩阵:
12 1 10 2
7 11 4 14
5 x 9 15
8 13 6 3
将其排成水平的,有:12,1,10,2,7,11,4,14,5,X,9,15,8,13,6,3。并记该序列为A
定义:”倒置变量值“ T,Ti表示序列A中位于第i位之后比Ai小的元素的个数
也就是说上面的序列的倒置变量值分别是:11,0,8,0,4,6,1,6,1,3,4,2,2,1。求和,得到总的Tsum = 49。
那么有如下几个原则来判断当前问题是否有解:
设:问题宽度为W。
设:问题的倒置变量和为T。
一、对于一个W为奇数的问题来说,任何合法的移动都不会改变其"倒置变量值"的奇偶性。
证明:>>水平移动式不会改变问题的T。
>>垂直移动,意味值blank跨越了(W-1)个方格,由于问题宽度W是奇数的,那么(W-1)必定为偶数,再设这W-1个数中有n个数大于当前移动数,则有(W-1-n)个数小于当前移动数,那么移动后,带来的T的改变是:(W-1-n)-n=W-1-2n,因为W-1是偶数,则W-1-2n也必为偶数,说明问题的T的奇偶性不变。
二、当W为偶数时,有以下公式:(T是偶数) == (空格位于从矩阵底部往上数的奇数行中)
证明:>>水平移动式不会改变问题的T。
>>垂直移动,意味值blank跨越了(W-1)个方格,由于问题宽度W是偶数的,那么(W-1)必定为奇数,再设这W-1个数中有n个数大于当前移动数,则有(W-1-n)个数小于当前移动数,那么移动后,带来的T的改变是:(W-1-n)-n=W-1-2n,因为W-1是奇数,则W-1-2n也必为奇数,说明问题的T的奇偶性会交替变化,但是空格位置也在交替变化,这种变化也符合上面定义的公式。
OK,有了上面两个定理,我们可以推论出一下可行解原则:
1、如果问题宽度是奇数的,那么每个可解的问题所定义的T必须是偶数的。
2、如果问题宽度是偶数的,那么当空格位于从下往上数的奇数行中时,问题的T必须是偶数的;当空格位于从下往上数的偶数行中时,问题的T必须是奇数的。
参考文档:http://www.cs.bham.ac.uk/~mdr/teaching/modules04/java2/TilesSolvability.html
- 从拼图游戏开始(三)_可行解的讨论
- 从拼图游戏开始(六)_游戏主体的Android实现
- 从拼图游戏开始(八)_功能完善
- 从拼图游戏开始(十)_项目总结
- 从拼图游戏开始(二)_带优先搜索的地图路线搜索java实现
- 从拼图游戏开始(一)_简单java模拟
- 从拼图游戏开始(七)_数据模块框架实现
- 从拼图游戏开始(九)_界面优化及功能完善
- 从“可行走骨架”开始开发应用
- 从控制权开始讨论java线程的同步方案。
- 从拼图游戏开始(四)_IDA*算法求解Java实现
- 从拼图游戏开始(五)_Android版功能及界面设计
- 从C开始_结构体_结构数组2(程序讨论)+清空输入行原理
- [技术讨论]从ERP免费开始到做人做事的讨论
- 59 从可行走骨架开始开发应用
- 从面试开始_我讨厌的排序
- 从面试开始_数组的反转&字符串转数字
- 从面试开始_面试常见一些零散的问题
- Chrome 报 Resource interpreted as Script but transferred with MIME type text/plain 警告的解决办法
- json 格式,以及json数据获取
- AVL平衡树的实现
- [javax.servlet.ServletException: java.lang.NullPointerException]
- Java与XML(一):采用DOM操作XML文件
- 从拼图游戏开始(三)_可行解的讨论
- vc6静态库的生成和调用
- why GNU grep is fast
- Java与XML(二):使用Dom4j 操作 XML 文件
- 快速排序(Quicktsort)之Java实现
- 字符串匹配之KMP算法初探
- ZeroMQ(java)中组件间数据传输(Pipe的实现)
- 使用Jquery EasyUi常见问题解决方案
- 详细的DOS命令说明