1
+ /*
2
+ *
3
+ * SIN5013 - Exemplo de Prova do Conteúdo Semestral
4
+ *
5
+ * 3. Escreva um programa (utilizando um ou mais métodos/funções em código ou pseudo-código) que dado um
6
+ * grafo não direcionado com n nós retorne o número de componentes conexos do grafo. Este grafo pode ser
7
+ * representado por: (a) uma matriz de adjacências booleana com n x n células correspondendo aos n nós do grafo;
8
+ * ou representado por: (b) um arranjo de nós sendo que cada nó possui um arranjo de vizinhos; neste caso,
9
+ * considere que Nó é uma classe ou estrutura que possui os seguintes campos [ou atributos]: numVizinhos
10
+ * (campo do tipo inteiro com o número de vizinhos do respectivos nó), vizinhos (arranjo de ponteiros para Nós
11
+ * com numVizinhos elementos), visitado (campo booleano). Escolha a representação que te convém, se desejar,
12
+ * considere que todas as variáveis são globais/static. Assuma que as variáveis já estão devidamente
13
+ * inicializadas/preenchidas.
14
+ *
15
+ * Representação:
16
+ * int numNos = n;
17
+ * boolean adjacencias[][] = new boolean[n][n];
18
+ * boolean visitados[] = new boolean[n];
19
+ *
20
+ *
21
+ * GRAFO
22
+ * (0) (1)-------------(4)---------------(5)
23
+ * | | | |
24
+ * | (6) | | |
25
+ * | | | |
26
+ * (2) (3)--------------- |
27
+ * | |
28
+ * -----------------------------------
29
+ *
30
+ *
31
+ * Matriz de Adjacência
32
+ * 0 1 2 3 4 5 6
33
+ * 0 0 - 1 - - - -
34
+ * 1 - 0 - 1 1 - -
35
+ * 2 1 - 0 - - - -
36
+ * 3 - 1 - 0 1 1 -
37
+ * 4 - 1 - 1 0 1 -
38
+ * 5 - - - 1 1 0 -
39
+ * 6 - - - - - - 0
40
+ *
41
+ */
42
+
43
+ #include <stdio.h>
44
+
45
+ #define nroNos 7
46
+ bool visitados [nroNos ];
47
+ bool matriz [nroNos ][nroNos ] = {{ false, false, true, false, false, false, false },
48
+ { false, false, false, true, true, false, false },
49
+ { true, false, false, false, false, false, false },
50
+ { false, true, false, false, true, true, false },
51
+ { false, true, false, true, false, true, false },
52
+ { false, false, false, true, true, false, false },
53
+ { false, false, false, false, false, false, false }};
54
+ int componentes = 0 ;
55
+
56
+ void zeraVariaveis (){
57
+ componentes = 0 ;
58
+ for (int i = 0 ; i < nroNos ; i ++ )
59
+ visitados [i ] = false;
60
+ }
61
+
62
+ void visitaVizinhos (int atual ){
63
+ for (int i = 0 ; i < nroNos ; i ++ ){
64
+ if ( visitados [i ] == false && matriz [atual ][i ] == true ){
65
+ visitados [i ] = true;
66
+ componentes ++ ;
67
+ printf ("(%d)-" , i );
68
+ visitaVizinhos (i );
69
+ }
70
+ }
71
+ }
72
+
73
+ void calculaComponentesConexos (){
74
+ // Percorre todos os 'nós'/'componentes'
75
+ for (int i = 0 ; i < nroNos ; i ++ ){
76
+ componentes = 0 ;
77
+ if ( visitados [i ] == false ){ // Se o componente ainda não foi visitado
78
+ visitaVizinhos (i ); // Chama o método que conta as conexões com os vizinhos
79
+ printf ("Grupo %d:\nQuantidade de componentes conectados: %d\n\n" , i , componentes );
80
+ }
81
+ }
82
+ }
83
+
84
+ int main (){
85
+
86
+ zeraVariaveis ();
87
+ calculaComponentesConexos ();
88
+
89
+ return 0 ;
90
+ }
0 commit comments