-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path01-grafo-s-d-m-adj.h
96 lines (60 loc) · 2.7 KB
/
01-grafo-s-d-m-adj.h
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
// ======================== GRAFO SIMPLES (SEM PESO NAS ARESTAS) E DIRECIONADO ========================
// importando pacotes
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
// definindo tamanho padrao
#define MAX_NUM_VERTICES 20 // numero maximo de vertices que pode existir no grafo
// criando grafo a partir de uma matriz de adjacencia
typedef struct
{
int m[MAX_NUM_VERTICES + 1][MAX_NUM_VERTICES + 1]; // vertices enumerados de 1 a MAX_NUM_VERTICES
int numArestas; // numero de arestas
int numVertices; // numero de vertices
} GRAFO;
// declarando funcoes
/*
bool inicializaGrafo(GRAFO* g, int nv) recebe como parametro o endereco do grafo g
e um int nv que e a quantidade de vertices que tera nesse grafo. A funcao inicializa
com 0 uma matriz de adjacencia que representa o grafo. Alem disso, tambem atualiza o
numero de vertices e zera o numero de arestas do grafo.
*/
bool inicializaGrafo(GRAFO* g, int nv);
/*
bool insereAresta(GRAFO* g, int v1, int v2) recebe o endereco do grafo g, um
int v1 e um int v2 que sao vertices. Se v1 e v2 forem vertices validos, a funcao
ira inserir uma aresta que sai de v1 e chega em v2. Ademais ira incrementar uma
unidade no numero de arestas do grafo.
*/
bool insereAresta(GRAFO* g, int v1, int v2);
/*
bool existeAresta(GRAFO* g, int v1, int v2) recebe o endereco do grafo g, um
int v1 e um int v2 que sao vertices. Se v1 e v2 forem vertices validos, a funcao
ira checar se existe uma aresta que sai de v1 e chega em v2. Se existir, retornara
true, caso contrario, retornara false.
*/
bool existeAresta(GRAFO* g, int v1, int v2);
/*
bool retiraAresta(GRAFO* g, int v1, int v2) recebe o endereco do grafo g, um
int v1 e um int v2 que sao vertices. Se v1 e v2 forem vertices validos e existir
uma aresta que sai de v1 e chega em v2, a funcao a retirara, decrementara o numero de arestas
e retornara true. Caso nao haja, retornara false.
*/
bool retiraAresta(GRAFO* g, int v1, int v2);
/*
void liberaGrafo(GRAFO* g) recebe o endereco do grafo g e zera o numero de vertices
e arestas dele. Dessa forma, ele e reinicializado.
*/
void liberaGrafo(GRAFO* g);
/*
void imprimeGrafo(GRAFO* g) recebe o endereco do grafo g e imprime a matriz de
adjacencia que o representa. Nessa matriz, o numero 1 sinaliza que a uma aresta
que sai do vertice na linha i e chega no vertice na coluna j. Caso nao haja aresta,
a posicao guardara o numero 0.
*/
void imprimeGrafo(GRAFO* g);
/*
GRAFO grafoTransposto(GRAFO* g) recebe o endereco do grafo g e retorna o seu grafo
transposto, ou seja, as colunas viram linhas e as linhas viram colunas.
*/
GRAFO grafoTransposto(GRAFO* g);