基于用户输入(选择向上,向下,左或右)中的3x3数组中的元素
moving elements in a 3x3 array based on user input(choice of up, down, left, or right)
因此,基本上我需要帮助使用现有数组并在该数组中移动一个3x3的特定数字,然后将其向上移动,等等。相应地移动。例子123321123
我想向左移动点(3,2)123213123
也适用于上下元素该程序还将跟上您的位置并相应地更改它们
我的程序也需要跟踪坐标,我尚未弄清楚如何实施。
#include <iostream>
#include <iomanip>
#include <array>
using namespace std;
void printarray(int num[3][3])
{
for(int i = 0;i < 3; i++)
{
for(int j = 0; j< 3; j++)
{
cout << num[i][j] << " ";
}
cout << "n";
}
}
void swapValues(int (&array)[3][3], int i1,int j1,int i2,int j2)
{
int temp = array[i1][j1];
array[i1][j1] = array[i2][j2];
array[i2][j2] = temp;
}
void moveleft(int (&array)[3][3], int i, int j)
{
if (i>0 && i<3 && j>=0 && j<3)
{
swapValues(array, i, j, i-1, j);
swapValues(array, i, j, i+1, j);
}
else
{
cout << "wrong move!" << endl;
}
//swapValues(array, i, j, i, j-1);
//swapValues(array, i, j, i, j+1);
}
void movedown(int (&array)[3][3], int i, int j)
{
swapValues(array, i+1, j, i, j);
swapValues(array, i-1, j, i, j);
}
void moveright(int (&array)[3][3], int i, int j)
{
swapValues(array, i, j+1, i, j);
swapValues(array, i, j-1, i, j);
}
void moveup(int (&array)[3][3], int i, int j)
{
//here you MUST check the indexes to make sure you CAN move left
//int lim = (3*3)-1;
//for(int x = lim; x >= 1; x--)
//{
swapValues(array, i, j, i-1, j);
swapValues(array, i, j, i+1, j);
int coord1d = j * 3 + i;
}
class Puzzle
{
public:
Puzzle();
void swapValues(int num[3][3], int i1, int j1, int i2, int j2);
//void moveleft(int[3][3], int start1, int start2);
void moveup(int (&array)[3][3], int i, int j);
void moveright(int (&array)[3][3], int i, int j);
void moveleft(int (&array)[3][3], int i, int j);
void movedown(int (&array)[3][3], int i, int j);
void printarray(int[3][3]);
};
int main()
{
int state1[3][3] = {{2, 8, 3}, {1, 6, 4}, {7, 0, 5}};
int state2[3][3] = {{2, 8, 1}, {4, 6, 3}, {0, 7, 5}};
int gstate[3][3] = {{1, 2, 3}, {8, 0, 4}, {7, 6, 5}};
cout << "this is state 1" << endl;
printarray(state1);
cout << "nn";
cout << "now this is state 2" << endl;
printarray(state2);
cout << "nn";
cout << "now this is the goal state" << endl;;
printarray(gstate);
int start1, start2;
cout << endl << endl << "please enter your starting point in the states listed above on the x axis(left to right)" << endl;
cin >> start1;
cout << "now enter the point on the y axis(up or down)" << endl;
cin >> start2;
//moveleft(state1, start1, start2);
cout << "this is moving coordinate (1, 1) upwards" << endl;
moveup(state1, start1, start2);
printarray(state1);
cout << endl;
cout << "this is moving coordinate (1, 1) to the left" << endl;
moveleft(state1, start1, start2);
printarray(state1);
cout << endl;
cout << "this is moving coordinate (1, 1) downwards" << endl;
movedown(state1, start1, start2);
printarray(state1);
cout << endl;
cout << "this is moving coordinate (1, 1) to the right" << endl;
moveright(state1, start1, start2);
printarray(state1);
cout << endl;
cin.get();
cin.get();
return 0;
}
请给我代码示例,解释很好,但对我来说永远不够清楚。不要求您给出答案,只需帮助我查看正确的答案
- 因此,我已经更新了代码,并且有点有效,唯一的问题是,当我使用以外的其他坐标(1,1)以外的其他坐标时,我会得到内存地址而不是数组编号。对此有任何解释将不胜感激,我不知道如何解决这样的问题,因为我不确定问题是如何解决的?
另外,代码完全可以编译并准备就绪,所以跑步,看看我的意思是我的意思是我的解释不够好。
这是一种可能的解决方案
使用此函数在给定索引
上交换值void swapValues(int (&array)[3][3], int i1,int j1,int i2,int j2)
{
int temp = array[i1][j1];
array[i1][j1] = array[i2][j2];
array[i2][j2] = temp;
}
然后,例如,您的moveLeft
将像这样
void moveLeft(int (&array)[3][3], int i, int j)
{
if (i>0 && i<3 && j>=0 && j<3)
{
swapValues(array, i, j, i-1, j);
}
else
{
cout << "wrong move!" << endl;
}
}
请注意,我将数组作为参考传递,否则您的修改将在您的main
函数中可见
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- .cpp和.h文件中的模板专用化声明
- 反向给定链表中的K节点
- 正在查找文档以获得PS4平台的C++中的设备信息
- enum是C++中的宏变量还是整数变量
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 将字符串存储在c++中的稳定内存中
- 文本文件中的单词链表
- 递归函数计算序列中的平方和(并输出过程)
- 如何从C++中的依赖类型中获得它所依赖的类型
- C++中的"inline"关键字
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- 如何使用 < 和 > 命令获取 c++ 中的输入和输出?
- 用C++中的一个变量定义一个常量
- vector.resize()中的分配错误
- 使用指针从C++中的数组中获取最大值
- 如何将OpenCV的Mat结构的部分图像矩阵加载到我自己的3x3数组中?
- 基于用户输入(选择向上,向下,左或右)中的3x3数组中的元素
- c++中的3x3矩阵旋转
- 从一个更大的矩阵中提取3x3矩阵