c - 在 C 中对数组进行打乱或随机化

标签 c arrays random

我刚刚开始一个项目,遇到了一些麻烦。这个想法是制作一个 8x8 数组,随机生成一个包含 10 个 block 的数组,一个随机起点,右上角是“导出”。然后程序将找到最快的路径,输出将是随机生成的数组以及导出的方向(即上,上,右,右,上,左)

显然,之后我必须采取许多步骤才能让数组执行我想要的操作,但我想知道是否有人可以帮助我弄清楚如何设置一个,使其看起来类似于 (E =退出,X=区 block ,Z=起点)

0 0 0 0 X 0 0 E
0 0 X 0 0 0 0 0
0 0 0 0 0 0 X 0
0 X 0 0 X 0 0 0
0 0 0 0 0 0 0 X
X 0 0 X 0 Z 0 0
0 0 0 0 0 0 0 0
0 0 X 0 0 0 X 0

到目前为止我已经有了这个程序。幸运的是,它放置了十个随机-1以及随机起点(我现在将其设置为“7”,但我最终会更改它),但我似乎无法保证右上角不会消失成为我需要的 -1 之一,然后用 99 替换,使数组只剩下 9 个 -1,而不是所需的 10 个。

#include <stdio.h>
#include <stdlib.h>
#define ROW 8
#define COLUMN 8
#define NUM 10
#define start 1

int main () {
    int x, y;
    int array[ROW][COLUMN];
    for (x = 0; x < ROW; x++) {
      for (y = 0; y < COLUMN; y++) {
        array[x][y] = 0;
      }
    }
    srand (time (NULL));
for (x = 0; x < NUM; x++) {
    int t = rand () % ROW;
    y = rand () % COLUMN;
    if (array[t][y] != -1) {
        array[t][y] = -1;
    } else {
        x--;
    }
} 
for (x = 0; x < start; x++)
{
    int t = rand () % ROW;
    y = rand () % COLUMN;
    if (array[t][y] != 7) {
    array[t][y] = 7;
    } else { x--;
    }
}

for (x = 0; x < ROW; x++) {
  for (y = 0; y < COLUMN; y++) {
        array[0][7] = 99;
  printf ("%d ", array[x][y]);
  }
printf ("\n");
}
return 0; }

任何帮助将不胜感激 - 我是一个糟糕的程序员。

最佳答案

如果我理解你的问题,那么我首先会将数组内容初始化为零(而不是 -1),并且我还会定义我想要随机<的元素数量/em> 设置为 -1。

#include <stdio.h>
#include <stdlib.h>
#define ROW 8
#define COLUMN 8
#define NUM 10

int main (int argc, char *argv[]) {
    int x, y;
    int array[ROW][COLUMN];
    for (x = 0; x < ROW; x++) {
      for (y = 0; y < COLUMN; y++) {
        array[x][y] = 0;
      }
    }

然后我们可以将NUM个元素随机设置为-1,例如

srand (time (NULL));
for (x = 0; x < NUM; x++) {
    int t = rand () % ROW;
    y = rand () % COLUMN;
    if (array[t][y] != -1) {
        array[t][y] = -1;
    } else {
        x--;
    }
}

最后,我们可以打印结果,例如

for (x = 0; x < ROW; x++) {
  for (y = 0; y < COLUMN; y++) {
      printf ("%d ", array[x][y]);
  }
  printf ("\n");
}
return 0;

关于c - 在 C 中对数组进行打乱或随机化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26704691/

相关文章:

c# - 一般 : Programming Code Guidelines & Styles

c - 子集的不同总和数

c - 服务器未准备好时如何使连接失败?

python - 测量 numpy 2d 区域之间的边界重叠

c++ - 100 和 149 之间(包括)的随机数的固定范围

c - 如何立即退出pthread

javascript - 如何使用 javascript 获取数组中特定 id 的最后一个值?

javascript - 按日期对 javascript 数组进行排序

java - 如何让我的图像出现在随机位置?

c# - 寻找用于生成标准 PRBS 序列的*通用*算法