2D массив, который рассчитывает и хранит 6 случайных точек

Я пытаюсь создать 2D-массив 80×20, который создает 6 линий, которые случайно связаны между двумя точками по периметру массива. Я полагаю, что это будет выглядеть как картинка, созданная только в некоторых местах. Моя проблема в том, что я не знаю, как выбрать и связать две случайные точки по периметру массива и отобразить их. Я сделал код, выбирающий совершенно случайные точки, но не могу решить эту задачу. Может ли кто-нибудь указать мне правильное направление?

#include <iostream>
#include <algorithm>
using namespace std;

int main()
{
const int rows = 80; //declares the amount of rows in the 2d array
const int cols = 20; //declares the amount of columns in the 2d array
char sky[rows][cols];

fill_n(&sky[0][0], 100, '-');
fill_n(&sky[0][0] + 100, rows*cols - 100, ' ');
random_shuffle(&sky[0][0], &sky[0][0] + rows*cols);

for(int r = 0; r < rows; ++r)
{
for(int c = 0; c < cols; ++c)
cout << sky[r][c];
cout << " ";
}

return 0;
}

1

Решение

Визуализируйте ваш массив следующим образом в упрощенном примере

[0][0], [0][1], [0][2], [0][3]
[1][0], [1][1], [1][2], [1][3]
[2][0], [2][1], [2][2], [2][3]
[3][0], [3][1], [3][2], [3][3]

Вы можете видеть, что ваши индексы периметра будут первым и последним строками, а также первым и последним столбцами. Я оставлю реализацию вам, но вы сможете использовать это подмножество вашего 2D-массива, чтобы выбрать значения, которые вы хотите соединить.

Удачи в вашем назначении!

0

Другие решения

Если я правильно читаю ваше описание, вы хотите сделать что-то вроде этого (псевдокод):

for i in 1..6
{ pick one of four sides of the rectangle at random
pick a random point p1 on that side

pick one of the other three sides at random
pick a random point p2 on that side

use a line drawing algorithm (like Bresenham) to connect p1 and p2
}

Начиная с алгоритма, который заполняет массив и случайным образом перемешивает его, вероятно, будет …. неэффективным …. хотя, как показывает аргумент, в конечном итоге одна из случайных перестановок найдет то, что вы хотите …

0

По вопросам рекламы [email protected]