-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGrafosSemMenu.cpp
105 lines (98 loc) · 2.96 KB
/
GrafosSemMenu.cpp
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
104
105
#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define tam 10
int num_vertices = 0;
int vertices[tam];
int arestas[tam][tam];
void gera() {
for (int i = 0; i < tam; i++) {
for (int j = 0; j < tam; j++) {
arestas[i][j] = 0; // Gera um grafo novo, sem arestas
}
}
}
void imprime_grafo() {
printf(" Mostrando grafo:\n\n");
for (int m=0; m < num_vertices; m++){
printf(" %d - ", vertices[m]);
for (int g=0; g < num_vertices; g++){
if (arestas[m][g] == 1) printf("<%d, %d> ", vertices[m], vertices[g]);
}
printf("\n");
}
}
void insere(int valor) { //Insere Vértices
int i ;
if (num_vertices<tam) {
for(i=0; i<num_vertices; i++) {
if (valor==vertices[i]) {
printf("\nVértice repetido.\n");
return;
}
}
vertices[num_vertices] = valor;
num_vertices++;
} else printf ("\nSem espaço disponível.\n");
}
void insereAresta(int orig, int dest) { //Insere Arestas
int i,j;
for (i = 0; i < num_vertices; i++) {
if (vertices[i] == orig) break;
}
if (i == num_vertices) { //Se o valor de i é igual ao n�mero de vértices, a vertice de origem não existe
printf ("\nVértice origem não existe.\n");
return;
}
for (j = 0; j <= num_vertices; j++) {
if (vertices[j] == dest) break;
}
if (j == num_vertices) { //Se o valor de j é igual ao n�mero de vértices, a vertice de destino não existe
printf ("\nVértice de destino não existe.\n");
return;
}
arestas[i][j] = 1; // 1 significa que existe aresta nas coordenadas [i,j]
}
void removeAresta(int orig, int dest){
int i,j;
for (i = 0; i < num_vertices; i++) {
if (vertices[i] == orig) break;
}
if (i == num_vertices) { //Se o valor de i é igual ao número de vértices, a vertice de origem não existe
printf ("\nVértice origem não existe.\n");
return;
}
for (j = 0; j <= num_vertices; j++) {
if (vertices[j] == dest) break;
}
if (j == num_vertices) { //Se o valor de j é igual ao número de vértices, a vertice de destino não existe
printf ("\nVértice de destino não existe.\n");
return;
}
if (arestas[i][j] == 1){
printf("\n\n\n Removendo aresta <%d, %d>...\n\n", vertices[i], vertices[j]);
arestas[i][j] = 0; // 0 significa que não existe aresta nas coordenadas [i,j]
} else printf("\n\n\n Não existe aresta <%d, %d> para remover.\n\n", vertices[i], vertices[j]);
}
int main() {
setlocale(LC_ALL, "Portuguese");
gera();
insere(0);
insere(1);
insere(2);
insere(10);
insere(20);
insere(30);
insereAresta(0,1);
insereAresta(0,2);
insereAresta(1,0);
insereAresta(1,2);
insereAresta(10,20);
insereAresta(10,30);
insereAresta(20,30);
imprime_grafo();
removeAresta(20,30);
imprime_grafo();
removeAresta(20,30);
imprime_grafo();
}