我刚刚开始一个项目,遇到了一些麻烦。这个想法是制作一个 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/