1

我正在尝试制作一个 80x20 2D 阵列,该阵列创建 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;
}
4

2 回答 2

0

在简化示例中按如下方式可视化您的数组

[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]

您可以看到您的周长索引将是第一行和最后一行,以及第一列和最后一列。我将把实现留给你,但你应该能够使用你的二维数组的这个子集来选择你想要连接的值。

祝你的任务好运!

于 2013-04-23T19:36:24.197 回答
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
}

从填充数组并随机打乱它的算法开始可能会......效率低下......尽管正如争论所言,最终其中一个随机排列会达到你想要的......

于 2013-04-23T20:13:46.537 回答