交换两个相邻元素的功能不起作用
Function to swap two adjacent elements isn't working
当我尝试移动合法的图块(即与 'blank' 图块 0 相邻的图块)时,没有任何反应。如果磁贴是非法的,程序将正常运行。这是移动函数:
bool move(int tile)
{
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
if (board[i][j] == tile)
{
// stops program from going out of bounds
if (j < d)
{
if (board[i][j + 1] == 0)
{
swap(board[i][j], board[i][j + 1]);
return true;
}
}
if (j > 0)
{
if (board[i][j - 1] == 0)
{
swap(board[i][j], board[i][j - 1]);
return true;
}
}
if (i > 0)
{
if (board[i - 1][j] == 0)
{
swap(board[i][j], board[i - 1][j]);
return true;
}
}
if (i < d)
{
if (board[i + 1][j] == 0)
{
swap(board[i][j], board[i + 1][j]);
return true;
}
}
}
}
}
return false;
}
和交换功能:
void swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
发生的事情是电路板看起来保持不变,没有进行任何更改。
你需要使用指针来改变board[i][j]的内存。
尝试这样的事情
void swap(int *i, int *j)
{
int temp = *i;
*i = *j;
*j = temp;
}
然后在您的调用代码中
swap(&board[i][j], &board[i][j - 1]);
当我尝试移动合法的图块(即与 'blank' 图块 0 相邻的图块)时,没有任何反应。如果磁贴是非法的,程序将正常运行。这是移动函数:
bool move(int tile)
{
for (int i = 0; i < d; i++)
{
for (int j = 0; j < d; j++)
{
if (board[i][j] == tile)
{
// stops program from going out of bounds
if (j < d)
{
if (board[i][j + 1] == 0)
{
swap(board[i][j], board[i][j + 1]);
return true;
}
}
if (j > 0)
{
if (board[i][j - 1] == 0)
{
swap(board[i][j], board[i][j - 1]);
return true;
}
}
if (i > 0)
{
if (board[i - 1][j] == 0)
{
swap(board[i][j], board[i - 1][j]);
return true;
}
}
if (i < d)
{
if (board[i + 1][j] == 0)
{
swap(board[i][j], board[i + 1][j]);
return true;
}
}
}
}
}
return false;
}
和交换功能:
void swap(int i, int j)
{
int temp = i;
i = j;
j = temp;
}
发生的事情是电路板看起来保持不变,没有进行任何更改。
你需要使用指针来改变board[i][j]的内存。
尝试这样的事情
void swap(int *i, int *j)
{
int temp = *i;
*i = *j;
*j = temp;
}
然后在您的调用代码中
swap(&board[i][j], &board[i][j - 1]);