交换二维数组中的两个值
Swapping two values within a 2D array
我目前正在做一项15个谜题的编程任务。我在这里的问题是关于如何将空的瓦片与相邻的瓦片交换。
例如,让我们使用初始设置板。我有:
int originalBoard[4][4] = {
{1 , 2, 3, 4},
{5 , 6, 7, 8},
{9 ,10,11,12},
{13,14,15, 0}};
因此,这里,数组中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])
{
}
在我的main
函数中,我会有变量:int blankRow
和int blankColumn
现在,我如何从locateEmptyTile
中获取数据,并以相关的实用方式将其应用到move
函数中?这个过程目前在我的脑海中没有连接。
我很感激任何一点点帮助。
如果你只是要求交换函数,你可以使用std::swap:
#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 a和int b):
int temp = a;
a = b;
b = temp;
正如你所看到的,交换和普通数组是一样的,c++不知道你是在交换两个矩阵单元还是两个数组元素,它只知道你在交换特定类型的两个内存块。
一个基本的交换概念(C++11之前)是持有一个临时变量。仅仅
template<typename T, typename U>
void swap(T& lhs, U& rhs) {
T t = lhs;
lhs = rhs;
rhs = t;
}
因此,您不需要引用blankRow
和blankCol
,只需要引用网格上的值即可。比方说,你想用(2, 2)
交换你知道的位于(2, 1)
的空白。。。
swap(originalBoard[2][1], originalBoard[2][2]);
将在originalBoard
内交换值。
如果您使用的是C++11或更高版本,只需使用std::swap()
来交换位置。这正是它的作用。
如果你想让originalBoard
在一个完全不同的板上是不可变的,那么在应用开关之前先复制它。
相关文章:
- 为什么我需要三个嵌套的大括号来调用赋值运算符,将const引用到二维数组
- 第二个和第二个最终值在 C++ 中混合在二维数组中
- 我无法将二维数组的两个元素的差异分配给C++中其他数组的元素?
- C++使用二维数组的程序,该数组要求用户输入两次.它需要将这些输入显示为输出
- 交换二维数组中的两个值
- 在C++中对二维数组进行归零.循环需要2个吗
- 是一个二维数组的名称,它在C++中的第一个元素的地址
- 如果两个维度在编译时都是未知的,如何传递二维数组
- 如何分配两个二维数组
- 如何创建一个一维数组来容纳几个二维数组
- 如何在二维数组中存储数据并使用2个循环显示二维
- 如何从.txt文件中读取两个二维数组
- 二维数组每秒钟两行c++
- 是否可以将两个多维数组一起添加到第三个多维数组中
- 是否可以使用for循环显示相邻的两个多维数组
- 如何在C++中为矢量数据结构中的二维数组获取用户输入,而不使用行和列上的两个for循环
- 如何在二维数组(c++)中找到N个最小值
- C++比较两个多维数组
- 为什么我可以声明一个二维数组与两个维度大小的变量,但不是新的
- 字符指针的二维数组是否需要以两个null结束?