#include <stdio.h>
#include <stdlib.h>
void matrix_allocation(int ***matrix, int N){
int i;
/* dynamic allocation for the matrix */
/*allocation of the rows*/
*matrix
= (int**)malloc(N
* sizeof(int*)); if((*matrix) == NULL){
printf("\n Error in memory allocation for the matrix \n"); }
/*allocation of the coloumns*/
for(i=0; i<N; i++){
(*matrix
)[i
]=(int*) malloc(N
* sizeof(int)); if ((*matrix)[i] == NULL){
printf("Cannot allocate enough memory\n"); }
}
}
void generate_matrix(int **matrix, int N){
int i, j;
for (i=0; i<N; i++){
for (j=0; j<N; j++){
if(i==j){ //the diagonal must be 0
matrix[i][j] = 0;
} else {
matrix
[i
][j
] = rand()%10;
}
}
}
printf("\nMatrix generated successfully!\n"); }
void free_matrix(int **matrix, int N) {
int i;
for(i
= 0; i
< N
; i
++) free(matrix
[i
]); }
int main(void) {
int **matrix;
matrix_allocation(&matrix, 5);
generate_matrix(matrix, 5);
free_matrix(matrix, 5);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCnZvaWQgbWF0cml4X2FsbG9jYXRpb24oaW50ICoqKm1hdHJpeCwgaW50IE4pewogICAgaW50IGk7CiAgICAvKiBkeW5hbWljIGFsbG9jYXRpb24gZm9yIHRoZSBtYXRyaXggKi8KICAgIC8qYWxsb2NhdGlvbiBvZiB0aGUgcm93cyovCiAgICAqbWF0cml4ID0gKGludCoqKW1hbGxvYyhOICogc2l6ZW9mKGludCopKTsgIAogICAgaWYoKCptYXRyaXgpID09IE5VTEwpewogICAgCXByaW50ZigiXG4gRXJyb3IgaW4gbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBtYXRyaXggXG4iKTsKICAgIH0KICAgIC8qYWxsb2NhdGlvbiBvZiB0aGUgY29sb3VtbnMqLwogICAgZm9yKGk9MDsgaTxOOyBpKyspeyAgIAogICAgCSgqbWF0cml4KVtpXT0oaW50KikgbWFsbG9jKE4gKiBzaXplb2YoaW50KSk7CiAgICAJaWYgKCgqbWF0cml4KVtpXSA9PSBOVUxMKXsKICAgICAgICAJcHJpbnRmKCJDYW5ub3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeVxuIik7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIGdlbmVyYXRlX21hdHJpeChpbnQgKiptYXRyaXgsIGludCBOKXsKICAgIGludCBpLCBqOwogICAgZm9yIChpPTA7IGk8TjsgaSsrKXsKICAgICAgICBmb3IgKGo9MDsgajxOOyBqKyspewogICAgICAgICAgICAgICAgICAgIGlmKGk9PWopeyAgICAgICAgICAgICAgICAgICAvL3RoZSBkaWFnb25hbCBtdXN0IGJlIDAKICAgICAgICAgICAgICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlaVx0IiwgbWF0cml4W2ldW2pdKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAJCQltYXRyaXhbaV1bal0gPSByYW5kKCklMTA7CiAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiJWlcdCIsIG1hdHJpeFtpXVtqXSk7CiAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgIH0KICAgIHByaW50ZigiXG5NYXRyaXggZ2VuZXJhdGVkIHN1Y2Nlc3NmdWxseSFcbiIpOwp9Cgp2b2lkIGZyZWVfbWF0cml4KGludCAqKm1hdHJpeCwgaW50IE4pIHsKCWludCBpOwoJZm9yKGkgPSAwOyBpIDwgTjsgaSsrKSBmcmVlKG1hdHJpeFtpXSk7CglmcmVlKG1hdHJpeCk7Cn0KaW50IG1haW4odm9pZCkgewoJaW50ICoqbWF0cml4OwoJbWF0cml4X2FsbG9jYXRpb24oJm1hdHJpeCwgNSk7CglnZW5lcmF0ZV9tYXRyaXgobWF0cml4LCA1KTsKCWZyZWVfbWF0cml4KG1hdHJpeCwgNSk7CglyZXR1cm4gMDsKfQo=