交换两个相邻元素的功能不起作用

时间:2016-09-08 18:05:34

标签: c arrays multidimensional-array cs50

当我尝试移动合法的图块(即与'空白'图块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;
}

如果没有做出任何改变,董事会仍然看起来一样。

1 个答案:

答案 0 :(得分:5)

你需要使用指针来改变板[i] [j]的内存。
试试这样的事情

void swap(int *i, int *j)
{
    int temp = *i;
    *i = *j;
    *j = temp;
}

然后在您的通话代码中

swap(&board[i][j], &board[i][j - 1]);