C++ 在二维数组中交换两个值

C++ 在二维数组中交换两个值,c++,arrays,function,C++,Arrays,Function,我目前正在做一个15个益智游戏的编程作业。我这里的问题是关于如何将空磁贴与相邻磁贴交换 例如,让我们来看看初始设置板。 我有: 这里,数组中12、15和0(空磁贴)的位置分别为[3][4]、[4][3]和[4][4]。用12或15交换0的方法是什么 我的想法是创建一个循环,每次我移动时都会跟踪空瓷砖 我相信一个最佳的方法是有两个函数。1将更新空磁贴的位置,1将进行移动 因此,在我的脑海中,我会: void locateEmptyTile(int& blankRow, int& b

我目前正在做一个15个益智游戏的编程作业。我这里的问题是关于如何将空磁贴与相邻磁贴交换

例如,让我们来看看初始设置板。 我有:

这里,数组中12、15和0(空磁贴)的位置分别为[3][4]、[4][3]和[4][4]。用12或15交换0的方法是什么

我的想法是创建一个循环,每次我移动时都会跟踪空瓷砖

我相信一个最佳的方法是有两个函数。1将更新空磁贴的位置,1将进行移动

因此,在我的脑海中,我会:

void locateEmptyTile(int& blankRow, int& blankColumn, int originalBoard[4][4])
{
    for (int row = 0; row < 4; row++)
    {
        for (int col = 0; col < 4; col++)
        {
            if (originalBoard[row][col] == 0)
            {
                blankRow = row;
                blankColumn = col;
            }
        }
    }
}

void move(int& blankRow, int& blankColumn, int originalBoard[4][4])
{

}
void locateEmptyTile(int&blankRow、int&blankColumn、int-originalBoard[4][4])
{
用于(int行=0;行<4;行++)
{
for(int col=0;col<4;col++)
{
如果(原始板[行][列]==0)
{
blankRow=行;
空白列=列;
}
}
}
}
无效移动(int&blankRow、int&blankColumn、int-originalBoard[4][4])
{
}
在我的
main
函数中,我会有变量:
intblankrow
intblankcolumn

现在,我如何从
locateEmptyTile
中获取数据,并以相关的实际方式将其应用到
move
函数中?这个过程目前在我的头脑中没有连接


非常感谢您的帮助。

如果您只是要求交换功能,您可以使用:

正如你所看到的,交换与普通数组一样,C++不知道你是在交换两个矩阵单元还是两个数组元素,它只知道你在交换两个具有特定类型的内存块。

< P>一个基本的交换概念(Pr+C++11)是一个临时变量。简单地说

template<typename T, typename U>
void swap(T& lhs, U& rhs) {
    T t = lhs;
    lhs = rhs;
    rhs = t;
}
。。。将交换原始板中的值

如果您使用的是C++11或更高版本,只需使用
std::swap()
交换位置即可。它就是这样做的


如果您希望
originalBoard
在完全不同的板中不可变,只需在应用开关之前先复制它。

请小心索引。C++数组是零基的,所以你的位置[3 ] [4 ],[4 ] [3 ]不是你所想的,并且[4 ] [4 ]是不在边界的。从move方法交换两个单元格位置。
#include <algorithm> // until c++11
#include <utility> // since c++11

...
int m[3][3];
...
//somewhere in the code
std::swap(m[i][j], m[j][i]); // this swaps contents of two matrix cells
...
int temp = a;
a = b;
b = temp;
template<typename T, typename U>
void swap(T& lhs, U& rhs) {
    T t = lhs;
    lhs = rhs;
    rhs = t;
}
swap(originalBoard[2][1], originalBoard[2][2]);