显示当时具有一个元素的2D数组

时间:2011-12-05 22:34:00

标签: c++ arrays 2d

我有一个填充0和1的二维数组。我必须以这样的方式显示该数组: - 始终显示0 - 当时只显示1个。

它假设看起来像迷宫,其中0是墙,1是当前位置。 我怎么能用c ++做到这一点?

编辑: 我提出了一个解决方案,但也许更简单一个。如果我创建了我的_array的副本并复制0和空格而不是1s,该怎么办?然后在循环中我将_array“1”中的一个分配给第二个数组,然后显示整个数组,然后用空格换回交换1?

EDIT2:

int _tmain(int argc, _TCHAR* argv[])
{
    file();
    int k=0,l=0;
    for(int i=0;i<num_rows;i++)
    {
        for(int j=0;j<num_chars;j++)
        {
            if(_array[i][j] == 1)
            {
                k=i;
                l=j;
                break;
            }
        }
    }
    while(1)
    {
        for(int i=0;i<num_rows;i++)
        {
            for(int j=0;j<num_chars;j++)
            {
                if(_array[i][j] == 0) printf("%d",_array[i][j]);
                else if(_array[i][j]==1)
                {
                    if(k==i && l==j)
                    {
                        printf("1");                

                    }
                    else printf(" ");

                }               
                l++;
                if(l>num_chars) break;
            }
            k++;
            l=0;
            printf("\n");               
        }
        k=0;
        system("cls");
    }
    return 0;
}

我写了类似的东西,但我仍然不知道如何在适当的时候清除屏幕。函数文件()从文件读取到2D数组。

2 个答案:

答案 0 :(得分:0)

假设你想要那样的东西

000000
0    0
0000 0
0 1  0
0 0000
000000

您可以在出现时0打印,如果没有则打印空白。要处理当前位置,您可以使用其他两个变量,例如posXposY。现在,每当您在阵列中找到1时,请检查if (j == posX && i = posY)并打印1,如果是这样的话......

由于您只需要在不同的位置可视化迷宫,我建议使用简单的显示功能。 DisplayMaze(int x, int y)正以所需格式将迷宫打印到屏幕上。如果_array[y][x] == 1还打印了一个1 ...

void DisplayMaze(int x, int y)
{
    for (int row = 0; row < num_rows; row++)
    {
        for (int col = 0; col < num_chars; col++)
        {
            if (_array[row][col] == 0)
                std::cout << "0 ";
            else if (row == y && col == x)
                std::cout << "1 ";
            else
                std::cout << "  ";
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
}

为了显示所有可能的位置,你必须迭代它们并检查数组中当前位置是否标有1(否则显示没有意义)

for (int y = 0; y < num_rows; y++)
{
    for (int x = 0; x < num_chars; x++)
    {
        if (_array[y][x] == 1)
        {
            DisplayMaze(x, y);
        }
    }
}

输出应如下所示:

0 0 0 0 0 0
0 1       0
0 0 0 0   0
0         0
0   0 0 0 0
0 0 0 0 0 0

0 0 0 0 0 0
0   1     0
0 0 0 0   0
0         0
0   0 0 0 0
0 0 0 0 0 0

0 0 0 0 0 0
0     1   0
0 0 0 0   0
0         0
0   0 0 0 0
0 0 0 0 0 0

0 0 0 0 0 0
0       1 0
0 0 0 0   0
0         0
0   0 0 0 0
0 0 0 0 0 0

0 0 0 0 0 0
0         0
0 0 0 0 1 0
0         0
0   0 0 0 0
0 0 0 0 0 0

...

但是,我建议使用更像C ++的方法,因为迷宫可以作为一个类实现。这个类可以带来它自己的display-method,并封装内部数据。它基本上可以是:

class Maze
{
public:
    // generate empty maze with given size
    Maze(int width, int height);

    // destructor
    ~Maze();

    // print maze if the given position is marked with 1
    void printPosition(int x, int y) const;

    // takes a cstring as input to initialize the maze from
    Maze& operator<<(const char* input);

    // returns true if the given position is marked with 1
    bool isValidPosition(int x, int y) const;

private:
    // this is the actual representation of the maze
    std::vector<std::vector<int> > grid_;
};

它将被用作以下内容:

Maze myMaze(num_chars, num_rows);
myMaze << "000000"
    "011110"
    "000010"
    "011110"
    "010000"
    "000000";

for (int y = 0; y < num_rows; y++)
{
    for (int x = 0; x < num_chars; x++)
    {
        if (myMaze.isValidPosition(x,y))
        {
            myMaze.printPosition(x,y);
        }
    }
}

答案 1 :(得分:0)

雇用你* [已解决] *

#include <cstdlib>
#include <iostream>

using namespace std;

int main()
{
int x,y;
cin>>x>>y;
char map[x][y];
memset(map, 'a', sizeof(map));
int y_pos = 0;
for (int x_pos = 0; x_pos < x * y; x_pos++){
    if (x_pos == x){
       x_pos = 0;
       y_pos = y_pos + 1;
       cout<<endl;
       }
    if (y_pos == y){
       system("pause");
       return 0;       
       }
    cout<<map[x_pos][y_pos];
    }