You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
1.5 KiB
80 lines
1.5 KiB
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
|
|
|
|
int main(int argc, char **argv){
|
|
|
|
FILE *fnodes;
|
|
char nodes_file[1000];
|
|
FILE *flist;
|
|
char list_file[1000];
|
|
FILE *fmatrix;
|
|
char matrix_file[1000];
|
|
int i,j;
|
|
int **E;
|
|
char *path;
|
|
int N; // number of nodes
|
|
|
|
/***
|
|
The argument for the program is the directory name
|
|
of the query for which we want to create the adjacency matrix
|
|
***/
|
|
|
|
if (argc != 2){
|
|
printf("list2matrix query_directory\n");
|
|
exit(1);
|
|
}
|
|
|
|
path = strdup(argv[1]);
|
|
|
|
|
|
/*** open the nodes file to obtain the number of nodes ***/
|
|
|
|
sprintf(nodes_file,"%s/graph/nodes",path);
|
|
fnodes = fopen(nodes_file,"r");
|
|
if (fnodes == NULL){
|
|
printf("ERROR: Cant open file %s\n",nodes_file);
|
|
exit(1);
|
|
}
|
|
fscanf(fnodes,"%d",&N);
|
|
|
|
fclose(fnodes);
|
|
|
|
|
|
/**** Read List and Construct the adjacency matrix E ****/
|
|
|
|
E = (int **)malloc(N*sizeof(int *));
|
|
for (i = 0; i < N; i ++){
|
|
E[i] = (int *)malloc(N*sizeof(int));
|
|
for (j = 0; j < N; j ++){
|
|
E[i][j] = 0;
|
|
}
|
|
}
|
|
|
|
sprintf(list_file,"%s/graph/adj_list",path);
|
|
flist = fopen(list_file,"r");
|
|
for (i = 0; i < N; i ++){
|
|
fscanf(flist,"%*d: %d",&j);
|
|
while (j != -1){
|
|
E[i][j] = 1;
|
|
fscanf(flist,"%d",&j);
|
|
}
|
|
}
|
|
|
|
fclose(flist);
|
|
|
|
|
|
/*** print the adjacency matrix ***/
|
|
|
|
sprintf(matrix_file,"%s/graph/adj_matrix",path);
|
|
fmatrix = fopen(matrix_file,"w");
|
|
for (i = 0; i < N; i ++){
|
|
for (j = 0; j < N; j ++){
|
|
fprintf(fmatrix,"%d ", E[i][j]);
|
|
}
|
|
fprintf(fmatrix,"\n");
|
|
}
|
|
fclose(fmatrix);
|
|
}
|
|
|
|
|