定理:图形A与图形B等价的充要条件图形A的排列的逆序数加上0元素行号和列号的奇偶性等于图形B的排列的逆序数加上0元素行号和列号的奇偶性。为方便表述,把图形排列的逆序数加上0元素行号和列号的奇偶性称为图形的奇偶性。(参考http://www.cppblog.com/lemene/archive/2007/10/04/33405.html)
排列 1 3 2 6 0 5 4 7 8,它的逆序数为8,0元素行号为2,列号为2。逆序数加行号,列号的奇偶性为偶。
排列 1 2 3 4 5 6 7 8 0,它的逆序数为8,0元素行号为3,列号为3。逆序数加行号,列号的奇偶性为偶。两个图形的奇偶性相同,根据定理判断它们等价。
static void shuffle(int size, int *a){ //打乱数组顺序
for (int i=0; i<size; i++) {
int r = arc4random()%size;
int t = a[i];
a[i] = a[r];
a[r] = t;
}
}
static bool parityCheck(int length, int *a){
//返回数组的排列的逆序数加上0元素行号和列号的奇偶性,true为偶,false为奇。
int v = 0;
int zeroIndex = -1;
for(int i=0; i<length; i++){
for(int j=i+1; j<length; j++){
if(a[i]>a[j]){
v++;
}
}
if(a[i] == 0) zeroIndex = i;
}
int lineIndex = zeroIndex/COLS+1;
int colIndex = zeroIndex%COLS+1;
return (lineIndex + colIndex + v) % 2 == 0;
}
for (int i=0; i<NODE_COUNT; i++) {
nodes[i] = i;
}
shuffle(NODE_COUNT, nodes);
if (parityCheck(NODE_COUNT, nodes) != parityCheck(NODE_COUNT, target)) {
//若不满足定理,则交换数组最后两个值,使其奇偶性改变。
int i = nodes[NODE_COUNT-2];
nodes[NODE_COUNT-2] = nodes[NODE_COUNT-1];
nodes[NODE_COUNT-1] = i;
}
分享到:
相关推荐
这是我自己写的一个关于...并且有初始可完成验证和拼图完成验证,文件是jar格式,可以运行看下效果,jar里有源代码,代码中有我写的详细的程序注释,感兴趣的朋友可以看一样,水平有限,有不好的地方,希望大家提建议!
NetBeans IDE 实现的 JAVA数字拼图代码
gaps-基于遗传算法的拼图自动完成游戏代码,想看看的同学可以进行下载
深度优先算法的最优解,可以解出拼图游戏9数码的最短路径
算法分析A*算法完成拼图 算法分析A*算法完成拼图 开发环境vc++ 6.0
拼图游戏中需要保证切割后的乱序图块可以还原回原图,则对切割乱序过程就有一定的约束,即拼图乱序及还原算法;此文档还包括图片压缩主流的两个算法——比例压缩和质量压缩。本文档为“Android拼图游戏设计(包括...
拼图游戏的算法.txt
gaps一种用于拼图基于遗传算法和OpenCV的求解器
自动生成可解拼图问题,并用A*算法给出自动完成的步骤。。另外还有暴力搜索的代码
使用A*算法实现的9宫格拼图小游戏,包含源码和程序
广度优先遍历4叉树,可以在3秒以内还原任何九宫格拼图,并附带验证程序 算法经过多次改进,个人认为已经达到了非常优异的性能,有什么好的思路或者疑问,欢迎交流。 具体实现过程是:把当前状态移动一步的下一个...
工程文件分ui部分和mainAPP主程序代码部分。代码全可运行,主函数代码package scu.picture.app; import scu.picture.ui.PictureMainFrame; //启动游戏的类 public class MainApp { public static void main...
本人编写的九宫格拼图游戏,可以根据难度级别生成3*3或者N*N格子的游戏界面,玩家可以手动破解。本人研究了很长时间的自动破解3*3宫格的算法,不算是很成功,因为破解出来要很长时间,偶尔会几秒钟出来结果。希望...
c#实现的拼图游戏 基于简单随机数组算法的拼图程序
拼图游戏
拼图 ---- C 实现的拼图程序.功能不是很全,仅供学习分享.
游戏名字不知道,好像叫九宫拼图,我写了个解拼图的程序...求解算法运算量很大。请勿恶意填写错误的拼图,会吃光你的内存的! ps:加了壳的,请勿在虚拟机中运行,会down掉虚拟机的 记得评分,不然要被扣掉无法返还
树tree、动态数组dyArray、hashMap、拼图算法.zip
拼图游戏对路径的搜索实现算法
java版的拼图、实现了智能拼图算法、算法很简单粗暴、