📄 node.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 + -