特殊滑动拼图 - 找到最小距离的算法

时间:2017-10-14 22:12:47

标签: algorithm puzzle sliding

我偶然发现了一个我想以编程方式解决的奇怪(而且非常讨厌的游戏)。它提醒了一点Rubik的立方体,但是二维。我正在努力解决这个问题......

有一个9x9的正方形,在内部正方形中放置了一些圆圈。例如,一个得到如下图片:

       A   B   C   D   E   F   G   H   I                      
     -------------------------------------                    
   9 |   |   | O |   |   | O |   |   |   | J                 
     -------------------------------------                    
   8 |   |   | O |   | O |   | O |   |   | K                  
     -------------------------------------                    
   7 |   |   |   | O |   |   | O | O |   | L                  
     -------------------------------------                    
   6 |   |   | O |   |   |   | O |   |   | M                  
     -------------------------------------                    
   5 |   |   | O |   |   |   |   |   |   | N                  
     -------------------------------------                    
   4 |   |   |   | O |   | O | O |   |   | O                  
     -------------------------------------                    
   3 |   |   |   |   | O |   | O |   |   | P                  
     -------------------------------------                    
   2 |   |   |   | O |   |   |   |   |   | Q                  
     -------------------------------------                    
   1 |   |   | O |   |   |   |   |   |   | R                  
     -------------------------------------                    
       0   Z   Y   X   W   V   U   T   S                      

可以使用方形周围的数字和字母将整个“行”或“列”移动到左/右或上/下。将游戏区域向右移动的圆圈将重新出现在左侧,反之亦然,相同的帐户为顶部/底部。

目标是将圆圈重新排列为具有最大移动量的给定模式。例如,应该重新排列上图中的圆圈,以便在最多17次移动中反映下面的图片:

       A   B   C   D   E   F   G   H   I                      
     -------------------------------------      
   9 |   |   |   |   |   |   |   |   |   | J                  
     -------------------------------------      
   8 |   |   | O | O | O | O | O |   |   | K                  
     -------------------------------------      
   7 |   |   | O |   |   |   | O |   |   | L                  
     -------------------------------------        
   6 |   |   | O |   |   |   | O |   |   | M                  
     -------------------------------------                    
   5 |   |   | O |   |   |   | O |   |   | N          
     -------------------------------------              
   4 |   |   | O |   |   |   | O |   |   | O        
     -------------------------------------           
   3 |   |   | O | O | O | O | O |   |   | P       
     -------------------------------------         
   2 |   |   |   |   |   |   |   |   |   | Q                  
     -------------------------------------                    
   1 |   |   |   |   |   |   |   |   |   | R                  
     -------------------------------------         
       0   Z   Y   X   W   V   U   T   S                      

我想将圆圈的起点和终点位置提供给可提供最短路径的程序。我正在努力寻找一种方法,不仅可以尝试所有可能的移动,直到达到给定的最大移动次数。

此外,修改用于解决魔方的方法似乎并不那么容易......

嗯,我认为这是一个非常有趣的问题,也许这里有人有一个很有启发性的想法。

更新: 在第一次尝试之后,尝试所有可能的动作并不真实。排列太多了。我认为这可能真的难以解决......如果可能的话。

0 个答案:

没有答案