Você está na página 1de 4

PONTIFÍCIA UNIVERSIDADE CATÓLICA DE MINAS GERAIS

INSTITUTO DE CIÊNCIAS EXATAS E INFORMÁTICA


CURSO DE CIÊNCIA DA COMPUTAÇÃO
TEORIA DOS GRAFOS E COMPUTABILIDADE

ALICE CABRAL E JULIANA SILVESTRE

TRABALHO: IMPLEMENTAÇÃO DE GRAFOS

BELO HORIZONTE
2023
1

Para todos os grafos implementamos matrizes de adjacência em C++, tendo em vista que
escolhemos representar gráficos densos, tornando menos viável a utilização de listas.
1 GRAFO DIRECIONADO NÃO-PONDERADO

Para implementar a matriz de adjacência de um grafo direcionado não-ponderado, foi


criada uma classe para esse tipo de grafo, contendo a quantidade de vértices do grafo e a matriz
como atributos. Além disso, foram criados 4 métodos: setQtV, inicializarGrafo, preencherArestas
e mostrarGrafo. O método setQtV é o método para definir a quantidade de vértices. O método
inicializarGrafo preenche todas as posições da matriz com o valor 0. O método preencherArestas
recebe como parâmetro dois vértices (v1 e v2) ligados por uma aresta direcionada, sendo v1 o
vértice inicial e o v2 o vértice final. Como cada elemento da matriz é uma aresta e o grafo é
direcionado, apenas a posição [v1][v2] é preenchida com o valor 1, indicando a existência de
uma aresta entre ambos os vértices. Por fim, o método mostrarGrafo apenas mostra a matriz. Na
função principal, criamos um grafo do tipo direcionado não-ponderado, definimos a quantidade
de vértices a partir do método setQtV, indicamos quais vértices possuem arestas entre si por meio
do método preencherArestas, e mostramos a matriz. Abaixo encontra-se a imagem de um grafo
direcionado não-ponderado que utilizamos como exemplo na implementação, e sua respectiva
matriz de adjacência:

2 GRAFO NÃO-DIRECIONADO NÃO-PONDERADO

Para implementar a matriz de adjacência de um grafo não-direcionado não-ponderado, foi


criada uma classe para esse tipo de grafo, contendo a quantidade de vértices do grafo e a matriz
como atributos. Além disso, foram criados 4 métodos: setQtV, inicializarGrafo, preencherArestas
e mostrarGrafo. O método setQtV é o método para definir a quantidade de vértices. O método
inicializarGrafo preenche todas as posições da matriz com o valor 0. O método preencherArestas
recebe como parâmetro dois vértices (v1 e v2) ligados por uma aresta não-direcionada. Como
cada elemento da matriz é uma aresta e como o grafo é não-direcionado, tanto a posição [v1][v2]
quanto a posição [v2][v1] são preenchidas com o valor 1, indicando a existência de uma aresta
entre ambos os vértices. Por fim, o método mostrarGrafo apenas mostra a matriz. Na função
principal, criamos um grafo do tipo não-direcionado não-ponderado, definimos a quantidade
2

de vértices a partir do método setQtV, indicamos quais vértices possuem arestas entre si por
meio do método preencherArestas, e mostramos a matriz. Abaixo encontra-se a imagem de um
grafo não-direcionado não-ponderado que utilizamos como exemplo na implementação, e sua
respectiva matriz de adjacência:

3 GRAFO DIRECIONADO PONDERADO

Para implementar a matriz de adjacência de um grafo direcionado ponderado, foi criada


uma classe para esse tipo de grafo, contendo a quantidade de vértices do grafo e a matriz como
atributos. Além disso, foram criados 4 métodos: setQtV, inicializarGrafo, preencherArestas e
mostrarGrafo. O método setQtV é o método para definir a quantidade de vértices. O método
inicializarGrafo preenche todas as posições da matriz com o valor 0. O método preencherArestas
recebe como parâmetro dois vértices (v1 e v2) ligados por uma aresta direcionada, sendo v1 o
vértice inicial e o v2 o vértice final, além de receber também o peso dessa aresta. Como cada
elemento da matriz é uma aresta e o grafo é direcionado, apenas a posição [v1][v2] é preenchida.
No entanto, ela é preenchida com o valor do peso, indicando a existência de uma aresta com
peso entre ambos os vértices. Por fim, o método mostrarGrafo apenas mostra a matriz. Na função
principal, criamos um grafo do tipo direcionado ponderado, definimos a quantidade de vértices a
partir do método setQtV, indicamos quais vértices possuem arestas entre si e qual o peso destas
por meio do método preencherArestas, e mostramos a matriz. Abaixo encontra-se a imagem
de um grafo direcionado ponderado que utilizamos como exemplo na implementação, e sua
respectiva matriz de adjacência:
3

4 GRAFO NÃO-DIRECIONADO PONDERADO

Para implementar a matriz de adjacência de um grafo direcionado ponderado, foi criada


uma classe para esse tipo de grafo, contendo a quantidade de vértices do grafo e a matriz como
atributos. Além disso, foram criados 4 métodos: setQtV, inicializarGrafo, preencherArestas e
mostrarGrafo. O método setQtV é o método para definir a quantidade de vértices. O método
inicializarGrafo preenche todas as posições da matriz com o valor 0. O método preencherArestas
recebe como parâmetro dois vértices (v1 e v2) ligados por uma aresta não-direcionada, além
de receber também o peso dessa aresta. Como cada elemento da matriz é uma aresta e como o
grafo é não-direcionado, tanto a posição [v1][v2] quanto a posição [v2][v1] são preenchidas
com o valor do peso da aresta, indicando a existência de uma aresta com peso entre ambos os
vértices. Por fim, o método mostrarGrafo apenas mostra a matriz. Na função principal, criamos
um grafo do tipo não-direcionado ponderado, definimos a quantidade de vértices a partir do
método setQtV, indicamos quais vértices possuem arestas entre si e qual o peso destas por meio
do método preencherArestas, e mostramos a matriz. Abaixo encontra-se a imagem de um grafo
não-direcionado ponderado que utilizamos como exemplo na implementação, e sua respectiva
matriz de adjacência:

Você também pode gostar