在C中混洗或随机化数组

时间:2014-11-02 21:35:01

标签: c arrays random

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

显然,我必须采取许多步骤才能让阵列完成我想要的任务,但我想知道是否有人可以帮我弄清楚如何设置一个以便它看起来像是(E) =退出,X =块,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; }

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

2 个答案:

答案 0 :(得分:0)

我会有一个三维数组,并且前两个维度从0-7随机化,第三个维度随机化为0和1. 0是一个块,1是开始指向。有一个for循环你想要的每个。然后用“0”的

填充数组的其余部分

答案 1 :(得分: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;