十五迷问题

来源:百度知道 编辑:UC知道 时间:2024/05/24 02:17:31
程序设计题目1:十五谜问题
程序设计要求:在一个4 x 4的方形棋盘上放置了15块编了号的牌,还剩下一个空格(如图1所示)。棋盘上号牌的一次合法移动是指将位于空格四周(上,下,左,右)的一块号牌移入空格位置的四种移动方式。设初始状态是第一行1,2,3,4第二行4,5,6空格8第三行9,10,7,11第四行是13,14,15,12,要求经过最少次数的合法移动转换成按照1,2,3,4,。。。。12,13,14,15排列的目标状态,请显示空白块移动的过程。
跪求源码才c/c++ ,请注释

求算法才是
#include <vector>
#include <cassert>
#include <list>
#include "Common.h"
using namespace std;
const int Size = 4;
class Node
{
public:
enum Direction {Up, Down, Left, Right, None};
Node()
: error_(0)
, pathLength_(0)
, parent(0)
, last(None)
{
}
bool Move(Direction dir)
{
Position pos(blankPos_);
switch(dir)
{
case Up:
-- pos.y;
break;
case Down:
++ pos.y;
break;
case Left:
-- pos.x;
break;
case Right:
++ pos.x;
break;
default:
assert(0);
}
if (dir != last && IsLegalPos(pos))
{
int chan