-
Notifications
You must be signed in to change notification settings - Fork 47
/
Copy path1082.c
103 lines (72 loc) · 1.26 KB
/
1082.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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/*
@autor: Malbolge;
@data: 29/03/2019;
@nome: Componentes Conexos;
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define true 1
#define false 0
#define MAXSIZE 35
_Bool visitados[MAXSIZE];
char adj[MAXSIZE][MAXSIZE];
char vertices[MAXSIZE];
int tam;
int m, n;
void dfs(int);
int compara(char *, char *);
void main ()
{
char a, b;
int i, j, casos;
int caso = 0;
scanf("%d", &casos);
while (casos--)
{
scanf("%d %d", &m, &n);
for (i = 0; i < n; ++i)
{
scanf(" %c %c", &a, &b);
adj[a - 'a'][b - 'a'] = 1;
adj[b - 'a'][a - 'a'] = 1;
}
printf("Case #%d:\n", ++caso);
int ans = 0;
for (i = 0; i < m; ++i)
{
if (!visitados[i])
{
++ans, dfs(i);
qsort(vertices, tam, sizeof(char), compara);
for (j = 0; j < tam; ++j)
printf("%c,", vertices[j] + 'a');
printf("\n");
}
tam = 0;
}
printf("%d connected components\n", ans);
printf("\n");
memset(visitados, false, sizeof(visitados));
memset(adj, 0, sizeof(adj));
}
}
void dfs(int u)
{
int i;
visitados[u] = true;
vertices[tam++] = u;
for (i = 0; i < m; ++i)
if (adj[u][i])
if (!visitados[i])
dfs(i);
}
int compara(char *a, char *b)
{
if (*a == *b)
return 0;
else if (*a > *b)
return 1;
else
return -1;
}