在C中随机排列或随机化数组

凯西

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

显然,之后我需要采取许多步骤来使阵列执行我想要的操作,但是我想知道是否有人可以帮助我弄清楚如何进行设置,从而使其看起来像(E = exit, X =块,Z =起点)

0 0 0 0 X 0 0 E
0 0 X 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)开始,我还将define随机设置为-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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章