如何判断一个拼图是否可还原!
在写完JS版本拼图游戏以后,偶然发现其实打乱顺序的拼图不是都能还原的。
在一个3*3的拼图中,会把图片裁切成9块,然后打乱顺序,通过调换空格块与邻块的位置来还原图片。
(图1)完全还原的拼图(设 8 号为空格位)
0 1 2 3 4 5 6 7 8
(图2)一个不能还原的顺序(拼到最后你发现6和7的位置倒了,而其他图片的位置正确)
0 1 2 3 4 5 7 6 8
如何判断一个打乱的拼图可还原?
一个打乱顺序的拼图,把数字连起来可以组成一个排列(比如图2= 0123456768)。
可以通过计算这个排列的逆序数个数加空格位置的坐标,最终得到的数的奇偶性判断。
数学原理比较复杂您可以看 http://blog.csdn.net/tailzhou/article/details/3002442
/** 判断一个打乱顺序的数字拼图是否可还原 order: 打乱以后的数字顺序;比如[0,1,2,3,4,5,7,6,8] order里的数字8表示空位 size: 3*3的拼图就传3就可以了 返回值:true false */ function solvability(order, size){ var a; var count = 0; var m = 0; var n = 0; var len = order.length; size = size || 3; //[0,1,2,3,4,5,7,6,8] for(var i=0; i<len; i++){ a = order[i]; //if( a == 8){ if(a == size*size-1){ m = parseInt(i/size); n = parseInt(i%size); } for(var j=i+1; j<len; j++){ if(order[j]<a){ count++; } } } count += m; count += n; return count%2 == 0; }
分类:
JavaScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?