Generate a 2D array of size 20 x 20 comprising 0 or 1 using a RAND generator. Ensure the following: 1- Seed your generator with a different seed (time of the day for instance) each time you re-execute the code. 2- Your 2D array must be symmetric, i.e., corresponds to a valid adjacency matrix. That is, if there is an edge between (i,j) then this means there is an edge between nodes (j,i). So think carefully in generating your 2D matrix.
int *random_matrix(const size_t v, const size_t e, const unsigned int seed); int *random_sequence(const size_t n, const size_t k, const unsigned int seed);
int main(void) { int *graph; graph = random_matrix(20, 11, time(0));
/* a chance to do something */
free(graph);
return 0; }
int *random_matrix(const size_t v, const size_t e, const unsigned int seed) { int *matr; size_t i, j; int *seq;
if (e > (v - 1) * v / 2) exit(1);
matr = (int *) calloc(v * v, sizeof(int)); seq = random_sequence((v - 1) * v / 2, e, seed); for (j = 0; j < v; j++) for (i = 0; i < j; i++) { /* or simply set matr[i + j * v] = seq[count++] */ matr[i + j * v] = seq[i + j * (j - 1) / 2]; /* in this way we guarantee that the matrix is valid */ matr[j + i * v] = matr[i + j * v]; } free(seq);
return matr; }
int *random_sequence(const size_t n, const size_t k, const unsigned int seed) { int *seq; size_t i, s;
if (k > n) exit(1);
/* here we seed the generator used by rand() */ srand(seed);
seq = (int *) calloc(n, sizeof(int)); for (i = 0; i < k; i++) { do s = rand() % n; while (seq[s] != 0); seq[s] = 1; }
Finding a professional expert in "partial differential equations" in the advanced level is difficult.
You can find this expert in "Assignmentexpert.com" with confidence.
Exceptional experts! I appreciate your help. God bless you!
Comments