我目前正在用 C++ 编写 n-puzzle,尽管由于某种原因我无法交换板的元素。让我解释。我有一个“Piece”类(该类的一些方法):
Piece::Piece(int l, int c, int n):
line(l),
column(c),
number(n)
{
}
int Piece::getLine()
{
return line;
}
int Piece::getColumn() const
{
return column;
}
int Piece::getNumber() const
{
return number;
}
void Piece::setLine(const int new_line)
{
this -> line = new_line;
}
void Piece::setColumn(const int new_column)
{
this -> column = new_column;
}
void Piece::setNumber(const int new_number)
{
this -> number = new_number;
}
我还有一个执行游戏的棋盘类。Board 是“Piece”类型向量的向量。正在使用以下代码创建板:
for(size_t i = 0; i < this -> width; i++)
{
vector<Piece> row;
for(size_t j = 0; j < this -> height; j++)
{
row.push_back(Piece(i, j, ((j == this -> width - 1) && (i == this -> height - 1) ? 0 : i * this -> width + j + 1)));
}
board.push_back(row);
}
到这里为止没有任何问题。问题是当我想交换 Board 的两个元素时。想象一下,我们有一个 3x3 游戏。如果我运行以下代码,结果将是错误的
swapPieces(board[0][0], board[1][0]);
swapPieces(board[1][0], board[2][0]);
cout << board[0][0] << "\t" << board[0][0].getLine() << endl;
谜底是正确的:
4 2 3
7 5 6
1 8 0
但是通过执行 board [0][0].getLine() 输出为 1,这是 Piece 的初始位置!我真的不知道我做错了什么。如果有人能帮帮我,我将不胜感激:)
编辑:swapPieces 添加:
void Board::swapPieces(Piece &p1, Piece &p2)
{
Piece p = p1;
p1 = p2;
p2 = p;
}