-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.c
84 lines (82 loc) · 3.51 KB
/
main.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
#include "main.h"
int main(int argc, char *argv[]){
int source, dest, min_node, max_node;
int *communities2nodes;
int method, quantity_communities;
Queue nodes;
Graph graph;
FILE *arq;
min_node = MAX_WEIGHT;
max_node = -1;
if(argc >= 3){
arq = fopen(argv[1], "r");
if(arq == NULL)
printf("Erro, nao foi possivel abrir o arquivo\n");
else
while((fscanf(arq,"%d %d\n", &source, &dest)) !=EOF){
if(source < min_node)
min_node = source;
if(dest < min_node)
min_node = dest;
if(source > max_node)
max_node = source;
if(dest > max_node)
max_node = dest;
enqueue(&nodes, source);
enqueue(&nodes, dest);
}
fclose(arq);
graph.numbers_nodes = max_node - min_node + 1;
allocate_memory(&graph);
while(not empty(&nodes)){
source = dequeue(&nodes);
dest = dequeue(&nodes);
insert_edge(&graph, source - min_node, dest - min_node, 1);
}
quantity_communities = atoi(argv[2]);
if(argc < 4){
communities2nodes = calculate_communities_repeated_square(&graph, quantity_communities);
imprime(communities2nodes, graph.numbers_nodes, min_node);
communities2nodes = calculate_communities_floyd_warshall(&graph, quantity_communities);
imprime(communities2nodes, graph.numbers_nodes, min_node);
communities2nodes = calculate_communities_johnson_queue(&graph, quantity_communities);
imprime(communities2nodes, graph.numbers_nodes, min_node);
communities2nodes = calculate_communities_johnson_array(&graph, quantity_communities);
imprime(communities2nodes, graph.numbers_nodes, min_node);
communities2nodes = calculate_communities_nbfs(&graph, quantity_communities);
imprime(communities2nodes, graph.numbers_nodes, min_node);
} else{
method = atoi(argv[3]);
switch(method){
case 0:
communities2nodes = calculate_communities_repeated_square(&graph, quantity_communities);
break;
case 1:
communities2nodes = calculate_communities_floyd_warshall(&graph, quantity_communities);
break;
case 2:
communities2nodes = calculate_communities_johnson_queue(&graph, quantity_communities);
break;
case 3:
communities2nodes = calculate_communities_johnson_array(&graph, quantity_communities);
break;
case 4:
communities2nodes = calculate_communities_nbfs(&graph, quantity_communities);
break;
default:
printf("Metodo Invalido");
return 0;
};
}
imprime(communities2nodes, graph.numbers_nodes, min_node);
}
return 0;
}
void imprime(int *communities2nodes, int numbers_nodes, int min_node){
int numbers_communities;
numbers_communities = get_max_community(communities2nodes, numbers_nodes);
for(int community = 1; community <= numbers_communities; community++)
for(int i = 0; i < numbers_nodes; i++)
if(communities2nodes[i] == community)
printf("%d %d\n", i + min_node, communities2nodes[i]);
};