zoukankan      html  css  js  c++  java
  • 如何判断一个拼图是否可还原!

    在写完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;
    }
  • 相关阅读:
    group having条件找max无记录问题
    Apache Http Server
    Google产品
    AES加密报错Illegal key size
    内网调试微信开发
    试用VSCode
    React的Transaction浅析
    一个webpack,react,less,es6的DEMO
    20151128
    React生命周期浅析
  • 原文地址:https://www.cnblogs.com/idche/p/2469516.html
Copyright © 2011-2022 走看看