Как использовать l oop для одновременного отображения зацикленной информации? Функциональная проблема - PullRequest
1 голос
/ 17 февраля 2020

Я изучаю C ++ и хотел бы помочь с функциональностью для моего кода ниже. Краткое описание / использование моего кода: Программа должна отображать рандомизированные (x, y) координаты, а затем распечатывать координаты в сетке.

Я получил все, что нужно, относительно рандомизированных (x, y) координат, а затем отображение их местоположения в сетке.

Проблема У меня возникло то, что мой код отображает отдельную сетку для каждой координаты вместо того, чтобы показывать ВСЕ координаты в той же сетке. [Я приложил картинку с моим текущим выводом ниже].

Я знаю, что это проблема с функциональностью ... но у меня возникают проблемы с размышлениями о том, как манипулировать моими циклами, чтобы сначала отображались координаты, а затем ОДНА сетка со всеми координатами на ней ... Надеюсь, это имеет смысл.

Фрагмент моего кода:

//Note: value of n and k is given by user earlier in the code
vector<vector<int> > vec( n , vector<int> (n));
cout << "\nGrid with city locations:\n";
for(i=0; i<k; i++) {
    //random select int coordinates (x,y) for each K(cities) 
    x = rand() % n + 0; 
    y = rand() % n + 0;
    arrCity[i] = i;

    //display coordinates for city 1..city2.. etc
    cout << "City " << arrCity[i] <<": (" << x << "," << y << ")" << endl;

    //display cities on grid
    for (int rows=0; rows < n; rows++) {
        for (int columns=0; columns < n; columns++) {
            if ((rows == y) && (columns == x)) {
                cout << "|" << (i);
            } else {
                cout << "|_";
            }

        }
        cout << "\n";
    }
    cout << "\n";
}

Токовый выход:

Как видите, для каждой "городской координаты" есть отдельная сетка

Ответы [ 2 ]

1 голос
/ 17 февраля 2020

Вам необходимо сохранить все городские координаты, чтобы отобразить их на одной сетке. В приведенном ниже коде я изменил несколько вещей, чтобы, надеюсь, решить вашу проблему.

  • Я переместил все связанные с городами данные в структуру
  • Затем все города инициализируются до того, как вывод сетки
  • При печати сетки мы должны искать все города, если их координаты соответствуют текущей позиции, если да, мы печатаем соответствующий индекс.

Live Demo

#include <vector>
#include <iostream>

struct City
{
    int index;
    int x, y;

    City(int index_, int x_, int y_)
        : index(index_), x(x_), y(y_)
    { }
};

int main()
{
    int n = 10;
    int k = 6;

    std::vector<City> arrCity;
    arrCity.reserve(k);

    for(int i = 0; i < k; i++)
        arrCity.emplace_back(i, rand() % n, rand() % n);

    std::cout << "\nGrid with city locations:\n";

    for (int k = 0; k < arrCity.size(); k++)
        std::cout << "City " << arrCity[k].index << ": (" << arrCity[k].x << "," << arrCity[k].y << ")" << std::endl;

    //display cities on grid
    for (int i=0; i < n; i++) {
        for (int j=0; j < n; j++) {
            int w = -1;
            for (int k = 0; k < arrCity.size(); k++)
                if ((i == arrCity[k].y) && (j == arrCity[k].x))
                    w = k;

            if (w >= 0)
                std::cout << "|" << arrCity[w].index;
            else
                std::cout << "|_";
        }
        std::cout << "\n";
    }

    return 0;
}
0 голосов
/ 17 февраля 2020

Вам необходимо отследить, какие клетки уже были посещены. Вот почему вам нужно взять другой массив, в котором хранятся уже посещенные ячейки и по какому значению.

int vis[n][n];
memset(vis, -1, sizeof vis);

for(i=0; i<k; i++) {
    //random select int coordinates (x,y) for each K(cities)
    x = rand() % n + 0;
    y = rand() % n + 0;
    arrCity[i] = i;
    vis[x][y] = i;

    //display coordinates for city 1..city2.. etc
    cout << "City " << arrCity[i] <<": (" << x << "," << y << ")" << endl;

    //display cities on grid
    for (int rows=0; rows < n; rows++) {
        for (int columns=0; columns < n; columns++) {
            if (vis[rows][columns] != -1) {
                cout << "|" << (vis[rows][columns]);
            } else {
                cout << "|_";
            }

        }
        cout << "\n";
    }
    cout << "\n";
}

Вывод:

enter image description here

...