⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 node.cpp

📁 本人这学期写八数码作业
💻 CPP
字号:
#include"stdafx.h"
#include"Node.h"
#include <algorithm>



Node::Node():parent_(0),self_(0),move(std::make_pair(-1,-1))
{
	for(int i=0;i<9;++i)
		data_[i]=-1;
	
}
Node::Node(int *data):parent_(0),self_(0),move(std::make_pair(-1,-1))
{
	for(int i=0;i<9;++i)
		data_[i]=data[i];
}
Node::Node(const Node& node):parent_(node.parent_),self_(node.self_),move(node.move)
{
	for(int i=0;i<9;++i)
		data_[i]=node.data_[i];
}
bool Node::operator==(const Node& node)
{
	for(int i=0;i<9;++i)
			if(data_[i]!=node.data_[i])
				return false;
	return true;
}
Node& Node::operator=(const Node& node)
{
	if(this==&node)
		return *this;
	move=node.move;
	parent_=node.parent_ ;
	self_=node.self_ ;
	for(int i=0;i<9;++i)
		data_[i]=node.data_[i];
	return *this;
}
void Node::randomNode()
{
//	for(int i=0;i<9;++i)
//		data_[i]=rand()%9;
}
std::pair<int,int> Node::getMovePos()const
{
	return move;
}
void Node::setMovePos(std::pair<int,int> movePos)
{
	move=movePos;
}
int Node::diffence(const Node& node)
{
	int count=0;
	for(int i=0;i<9;++i)
		if(data_[i]!=node.data_[i])
			++count;
	return count;
}
void Node::setParent(int parent)
{
	parent_=parent;
}
int Node::getParent()const
{
	return parent_;
}
void Node::setSelf(int self)
{
	self_=self;
}
int Node::getSelf()const
{
	return self_;
}
int Node::getPos()const
{
	for(int i=0;i<9;++i)
		if(data_[i]==0)
			break;
	
	return i;
}
void Node::swapValue(int first,int second)
{
	std::swap(data_[first],data_[second]);
	move=std::make_pair(first,second);
}
std::ostream& operator <<(std::ostream& out,Node& node)
{	
	for(int i=0;i<9;++i)
	{
		if(i%3==0)out<<std::endl;
		out<<node.data_[i]<<"\t";
	}
	return out;
}
const int NodeFactory::table[9][4]={
		{1,3,-1,-1},{0,2,4,-1},{1,5,-1,-1},
		{0,4,6,-1},{1,3,5,7},{2,4,8,-1},
		{3,7,-1,-1},{4,6,8,-1},{5,7,-1,-1},
		 };
 int NodeFactory::count=0;
NodeFactory::NodeFactory(const Node& node):node_(node),first_(node.getPos()),second_(-1)
{
}
Node NodeFactory::getNextNode()
{
	++count;
	Node node=node_;
	node.swapValue(first_,table[first_][second_]);
	node.setSelf(count);
	node.setParent(node_.getSelf());
	return node;
}
bool NodeFactory::hasNext()
{
	++second_;
	if( node_.getMovePos()==std::make_pair(table[first_][second_],first_))
		++second_;
	if(first_==4 && second_==4)return false;;
	
	if(table[first_][second_]!=-1&&second_<4)return true;
	return false;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -