所以我正在做一个益智游戏,我遇到了一个问题。我的董事会将在稍后的计划中被扰乱。我想在它被扰乱之前复制它,在我的游戏的胜利条件下使用它。我的想法是每次用户移动磁贴时将复制的电路板与加扰的电路板进行比较,以查看它们是否成功(获胜)。但我有点不确定如何为电路板制作复制构造函数。这就是我所做的事情(并不像它应该做的那样工作)。
Board::Board(int userInput)
{
this->gameSize = userInput;
int zeroPos[2] = { 0, 0 };
SetTileNumbers();
}
void Board::SetTileNumbers()
{
const int sizeOfGame = gameSize; //Size given from user when the board was created.
int tileNumber = 0; //The value given to each Tile.Number.
int row, column;
boardOfTiles = new Tile* [sizeOfGame];
for (int i = 0; i < sizeOfGame; i++)
{
boardOfTiles[i] = new Tile [sizeOfGame]; //The doublepointer is given an additional dimension
}
for (row = 0; row < sizeOfGame; row++)
{
for (column = 0; column < sizeOfGame; column++)
{
boardOfTiles[row][column].number = tileNumber; //Loops that goes through the entirety to instantiate the board of tiles.
tileNumber++;
}
}
}
void Board::SetTileNumbers(const Board& copy)
{
const int sizeOfGame = copy.gameSize;
int row , column;
boardOfTiles = new Tile*[sizeOfGame];
for (int i = 0; i < sizeOfGame; i++)
{
boardOfTiles[i] = new Tile[sizeOfGame];
}
for (row = 0; row < sizeOfGame; row++)
{
for (column = 0; column < sizeOfGame; column++)
{
boardOfTiles[row][column].number = copy.boardOfTiles[row][column].number;
}
}
}
答案 0 :(得分:0)
我希望这听起来不偏离主题,但除了复制构造函数之外,我认为你可能会有一个不同的问题:你决定解决方案的方式是非常低效的。你浪费了cpu时间而浪费了内存。
对于每个比较两个NxN板的步骤来说,就像它所获得的那样无能为力。您可以尝试不同的方法:为电路板上的每个位置分配一个数字,您知道解决方案是按特定顺序对数字进行排序。
对于3x3电路板,'THE'解决方案看起来像:
1 2 3
4 5 6
7 8 9
此外,2d数组作为连续数组存储在内存中,您可以将解决方案视为数组:
1 2 3 4 5 6 7 8 9
任何其他安排都不代表解决方案。 检查天气阵列是一个更容易解决的问题。在最糟糕的情况下,您仍然在查看O(n ^ 2)以检查数组是否已排序但没有内存开销。另外,我相信你可以找出一种更有效的算法来检查数组是否已经排序。
我希望这会有所帮助......