olha que fiz o código ainda para perceberes como entra o fisher-yates no código, porque senão ainda tirava o array numbers e fazia directamente na matrix e ficavas a ver navios ...
para a próxima levas com algo deste género
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define intMatrixCell(m, o, l, c) ((int *) (((size_t) m) + (o) * (l) * sizeof(int) + (c) * sizeof(int)))
#define xorswap(x, y) (* (x) ^= * (y), * (y) ^= * (x), * (x) ^= * (y))
int main(int argc, char ** argv) {
int n = 0, total = 0;
do {
printf("Insira a ordem da matriz quadrada : "); fflush(stdout);
if (scanf("%d", &n) && n <= 0)
printf("Ordem da matriz escolhida invalida\n");
} while (n <= 0);
total = n * n;
int * matrix = malloc(sizeof(int) * total);
if (! matrix) {
fprintf(stderr, "Erro na alocacao de memoria para a matriz\n");
return -1;
}
for (int i = 0; i < total; ++i)
matrix[i] = i;
srand(time(NULL));
for (int i = 0; i < total; ++i) {
int selected = (rand() % (total - i)) + i;
if (selected != i)
xorswap(& matrix[selected], & matrix[i]);
}
for (int c = 0; c < n; ++c) {
for (int l = 0; l < n; ++l)
printf("%3d ", * intMatrixCell(matrix, n, l, c));
printf("\n");
}
free(matrix);
return 0;
}
↧