【问题标题】:How to fill the Array with the rand Function?如何用 rand 函数填充数组?
【发布时间】:2018-12-23 10:13:51
【问题描述】:

我想从中心开始填充一个矩阵。在此之后,我必须使用 rand () 函数提供位置,停止条件是找到邻居分配值为 1 的位置。必须这样做直到到达矩阵的边界,即当 x 或 y 假定位置为 0 或 (size-1) 时的 a

x = y = (size + 1) / 2;
   matrix[x][y]=1;                   //default of the matrix
    do{
       x1=rand() %(size-1);          //random position in x
       y1=rand() %(size-1);          // random position in y
       matrix[x1][y1]=1;             //declare the value in the position obtained
    }while((matrix[x1-1][y1  ]==0)||
           (matrix[x1+1][y1  ]==0)||
           (matrix[x1  ][y1-1]==0)|| 
           (matrix[x1  ][y1+1]==0)||
           (x1==x)||(y1==y));

我的主要问题是我的条件是否为真,以及当我到达矩阵的边界时如何停止这种结合。

【问题讨论】:

  • “从中心开始填充矩阵”是什么意思?
  • 看起来像一个洪水填充任务?
  • 即先声明中心的位置为1,然后随机选择它的随机位置,直到得到的位置为next。因此,当您打印它时,您将拥有一个从中心填充的矩阵。
  • 必须首先检查数组索引的边界。另一种方法是使矩阵在每个方向上变大 2 个元素,初始化并使用无效值而不是检查索引边界。
  • 也一样?我的想法是为每个值创建一个循环,直到找到一个被值 1 占据的相邻位置,然后是一个外部循环,根据数组的尺寸限制为迭代

标签: c algorithm matrix while-loop do-while


【解决方案1】:

要从矩阵的中心向外移动,请在中心周围选择一个正方形并遍历该正方形中的元素。这是一个使用奇数大小的矩阵的示例。您可以添加附加条件来根据邻居的值设置值。

int main(void)
{
    srand((unsigned)time(NULL));
    int size = 21;
    int **matrix = malloc(size * sizeof(int*));
    for(int i = 0; i < size; i++)
        matrix[i] = malloc(size * sizeof(int));

    for(int i = 0; i < size; i++)
        for(int j = 0; j < size; j++)
            matrix[i][j] = 0;

    int center = size / 2 + 1;
    matrix[center][center] = 1;
    for(int range = 1; range < size / 2; range++)
    {
        for(int i = center - range; i < center + range; i++)
            for(int j = center - range; j < center + range; j++)
            {
                if(
                    (i == (center - range))||
                    (j == (center - range))||
                    (i == (center + range - 1))||
                    (j == (center + range - 1))
                    )
                    if(rand() % 2)
                        matrix[i][j] = 1;
            }
    }

    for(int i = 0; i < size; i++)
    {
        for(int j = 0; j < size; j++)
            printf("%d", matrix[i][j]);
        printf("\n");
    }

    return 0;
}

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 2016-12-27
    • 1970-01-01
    • 2021-06-25
    • 1970-01-01
    • 2019-07-20
    • 2011-07-26
    • 1970-01-01
    相关资源
    最近更新 更多