将8 7 1 变成1 2 3   只能往_的位置移动数字,请问该采取什么算法呢?求救 ,多谢
  3 6 5    8 _ 4        
  _ 2 4    7 6 5

解决方案 »

  1.   

    定义3*3数组-数值为0
    每次移动前先判断是否是边界或非0
    if(是)
     不可移动
    else

      移动 
      移动后判单是否与结果相同
    }
      

  2.   

    广度优先算法。<-这个不用说了吧?求最佳解的。需要比较好的编程技巧和大内存。也可以使用A*算法。<-需要一个比较好的估值算法。比较难。如果你只是要个方法的话,深度优先算法也可以啊。广度优先的非递归伪码:
    if (NowState!=Target)
    {
        NowState 出队;
        NowState.Next[0..3] 进队;
    }else 结束。
    队列指针++;
    如果使用递归更好写,但是资源相应增多。不是很简单。