基于用户输入(选择向上,向下,左或右)中的3x3数组中的元素

moving elements in a 3x3 array based on user input(choice of up, down, left, or right)

本文关键字:中的 3x3 数组 元素 向下 输入 于用户 用户 选择      更新时间:2023-10-16

因此,基本上我需要帮助使用现有数组并在该数组中移动一个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函数中可见