Você está na página 1de 20

UNIVERSIDADE FEDERAL DE SANTA CATARINA

CENTRO TECNOLÓGICO
DEPARTAMENTO DE ENGENHARIA DE PRODUÇÃO E SISTEMAS
PROGRAMA ESPECIAL DE TREINAMENTO
TUTORA: PROFESSORA MIRNA DE BORBA

NOÇÕES DE TEORIA DOS GRAFOS ATRAVÉS DE PROGRAMAS


EM LINGUAGEM TURBO-PASCAL 7.0

PROF. ORIENTADOR: SÉRGIO COELHO, Ms. Ing.

ACADÊMICOS : XROBSON SOARES DA COSTA


ANDRÉ MEYER LUZ

Florianópolis, 15 de março de 1996


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

1. SUMÁRIO

2. INTRODUÇÃO ______________________________________________________________________ 3

3. TERMOS UTILIZADOS ______________________________________________________________ 4


3.1. VÉRTICE ___________________________________________________________________________ 4
3.2. ARESTA ____________________________________________________________________________ 4
3.3. TIPOS DE GRAFOS ____________________________________________________________________ 5
3.4. COMPONENTES FORTEMENTE CONEXAS ___________________________________________________ 5
3.5. MATRIZ DE ADJACÊNCIA - ______________________________________________________________ 5
4. PROGRAMA PARA TESTE DE CONEXIDADE __________________________________________ 6
4.1. OBJETIVO: __________________________________________________________________________ 6
4.2. ENTRADA: __________________________________________________________________________ 6
4.3. SAÍDA: _____________________________________________________________________________ 6
4.4. EXEMPLO: __________________________________________________________________________ 6
5. PROGRAMA COM BASE NO ALGORITMO DE ROY ____________________________________ 8
5.1. OBJETIVO: __________________________________________________________________________ 8
5.2. ENTRADA: __________________________________________________________________________ 8
5.3. SAÍDA: _____________________________________________________________________________ 8
5.4. EXEMPLO: __________________________________________________________________________ 8
6. PROGRAMA DO CICLO HAMILTONIANO DE CUSTO MÍNIMO ________________________ 11
6.1. OBJETIVO: _________________________________________________________________________ 11
6.2. ENTRADA: _________________________________________________________________________ 11
6.3. SAÍDA: ____________________________________________________________________________ 11
6.4. EXEMPLO: _________________________________________________________________________ 11
7. PROGRAMA BASEADO NO ALGORITMO DE ROBERT E FLORES ______________________ 14
7.1. OBJETIVO: _________________________________________________________________________ 14
7.2. ENTRADA: _________________________________________________________________________ 14
7.3. SAÍDA: ____________________________________________________________________________ 14
7.4. EXEMPLO: _________________________________________________________________________ 14
8. PROGRAMA BASEADO NO ALGORITMO DE FLOYD _________________________________ 16
8.1. OBJETIVO: _________________________________________________________________________ 16
8.2. ENTRADA: _________________________________________________________________________ 16
8.3. SAÍDA: ____________________________________________________________________________ 16
8.4. EXEMPLO: _________________________________________________________________________ 16
9. BIBLIOGRAFIA ____________________________________________________________________ 19

PET-EPS Universidade Federal de Santa Catarina 2


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

2. INTRODUÇÃO

A Teoria dos Grafos tem suas origens remotas nas mais diversas áreas
do conhecimento humano, mas veio a ser enunciada somente em 1736 com um
problema simples resolvido pelo matemático Euler, conhecido como problema das
pontes de Königsberg, que consistia em ligar as pontes sem que o caminho fosse
quebrado e sem que se passasse duas vezes pela mesma ponte. Euler mostrou
que o problema não tinha solução, representando as margens e as ilhas do
problema por pontos e as pontes por linhas ligando-as.
A teoria dos grafos ficou adormecida até as décadas de 40 e 50,
quando do advento dos computadores que trouxeram maior agilidade e precisão
na realização das contas e no processamento de dados, dando grande impulso ao
desenvolvimento de novos teoremas e novas técnicas de resolução de problemas.
Hoje em dia a Teoria dos Grafos está extremamente difundida para
problemas que envolvem arranjo de objetos discretos, como os elementos de uma
linha de produção em um processo industrial, problemas de arranjo de
componentes eletrônicos e suas ligações em uma placa, problemas que envolven
redes de comunicação, entre vários outros que poderiam ser aqui enunciados.
Um grafo pode ser representado por um conjunto de pontos (vértices)
finito e não vazio e uma relação binária sobre esses pontos que representam uma
linha (aresta) orientada ou não ligando-os entre si.
Este trabalho tem por objetivo a apresentação da teoria dos grafos,
uma ferramenta de grande valia na resolução de problemas de pesquisa
operacional, onde haja um caminho a ser percorrido, seja numa linha de produção
ou no setor de serviços como o de coleta de lixo de uma cidade.
O trabalho é constituÍdo de duas partes básicas. A primeira é um
glossário com os termos utilizados para o comentário dos componentes da teoria
dos grafos, uma segunda parte com programas em linguagem turbo-pascal e
comentários a respeito dos mesmos.

PET-EPS Universidade Federal de Santa Catarina 3


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

3. TERMOS UTILIZADOS

3.1. VÉRTICE
- é a representação de elementos finitos. Apreseenta-se como pontos no
grafo. Os vértices são ditos:
⇒ Isolados - quando não têm ligação com outros vértices;
⇒ adjacentes a outro - quando têm pelo menos uma aresta ligando
um ao outro;
⇒ pendentes - quando possuem grau 1;
Propriedade:
• grau - corresponde ao número de arestas incidentes.

3.2. ARESTA
- representa as ligações entre os diversos elementos finitos do grafo. As
arestas são ditas:
⇒ incidentes em relação a algum vértice- quando liga o mesmo a
um outro;
⇒ adjacentes a outra - quando compartilha a ligação de um mesmo
vértice com outra aresta;
⇒ paralelas - quando ligam os mesmos dois vértices;
⇒ em laço - quando liga um vértice a ele mesmo.

Propriedades:
• Não orientada - Quando não tem sentido obrigatório para ser
percorrida;
• Orientada: Quando só pode ser percorrida em um único sentido.

PET-EPS Universidade Federal de Santa Catarina 4


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

3.3. TIPOS DE GRAFOS

⇒ simples - quando não possuem arestas paralelas ou laços;


⇒ multigrafos - quando apresentam arestas paralelas ou laços;
⇒ completos - quando todas as arestas do grafo têm ligação direta
com todas as outras (também chamado de clique);
⇒ Complementar de outro - quando as relações existentes no
mesmo são exatamente as inexistentes em outro;
⇒ Isomorfos - quando dois grafos têm o mesmo númerode vértices
e as mesmas relações binárias;
⇒ subgrafo - quando são um subconjunto de outro grafo;
⇒ regular de grau r - quando todos os vértices do grafo têm o
mesmo grau r;
⇒ nulo - quando não possuem arestas (= regular de grau 0);

Propriedades:
• Dirigidos - quando compostos por arestas orientadas;
• Não dirigidos - quando compostas por arestas não dirigidas.

3.4. COMPONENTES FORTEMENTE CONEXAS

- são conjuntos de vértices dentro dos quais pode-se chegar a qualquer


vértice partindo-se de qualquer outro vértice pertendente à mesma
componente fortemente conexa.

3.5. MATRIZ DE ADJACÊNCIA -


A matriz de adjacência é uma matriz de tamanho nxn, onde n é o
número de vértices do grafo. Esta matriz representa todas as arestas
do grafo, sendo ele orientado ou não.

PET-EPS Universidade Federal de Santa Catarina 5


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

4. PROGRAMA PARA TESTE DE CONEXIDADE

4.1. OBJETIVO:
O objetivo do programa programa para teste de conexidade é informar
se há algum caminho que ligue os pontos do grafo uns aos outros, caracterizando
um grafo conexo, ou se há algum vértice isolado, caracterizando um grafo
desconexo.

4.2. ENTRADA:
O programa para teste de conexidade tem como entrada o número de
vértices do grafo não orientado que se quer analisar e a matriz de adjacência
correspondente.

4.3. SAÍDA:

Uma informação sobre a conexidade ou não de um grafo e o menor


número de subgrafos em que o grafo pode ser subdividido, caso seja desconexo.

4.4. EXEMPLO:
Consideremos o grafo abaixo:
1 2 3 4

6 7

8 9
10 11

PET-EPS Universidade Federal de Santa Catarina 6


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

O programa de verificação de conexidade se inicia como seguinte


aviso:

Este programa é baseado no algoritmo de conexidade e tem por


objetivoverificar se um dado grafo é conexo ou não, sendo que
neste caso informa-se também se o menor número de subgrafos em que
o grafo pode ser subdividido

Pressione qualquer tecla para continuar

Após pressionada qualquer tecla começam a aparecer na tela avisos


como o seguinte:
Digite o número de vértices do grafo a ser analisado

Para o nosso exemplo digita-se 11.


Após a entrada deste dado começam a aparecer avisos como o
seguinte:
Há conexão direta entre os vértices 1 e 2?

Obs.: Onde deve-se digitar 1 para resposta afirmativa e 0 para negativa


e os números variam de 1 até n para todos os elementos da matriz triângulo
superior de adjacência.

Neste exemplo a matriz de adjacência que representa o grafo é:

1 1 0 0 0 1 0 1 1 0 0
1 1 0 0 0 0 1 0 0 0 0
0 0 1 0 1 0 0 1 0 0 1
0 0 0 1 0 0 1 0 0 0 0
0 0 1 0 1 0 0 0 1 1 1
1 0 0 0 0 1 0 0 0 0 0
0 1 0 1 0 0 1 0 0 0 0
1 0 1 0 0 0 0 1 0 0 0
1 0 0 0 1 0 0 0 1 1 0
0 0 0 0 1 0 0 0 1 1 0
0 0 1 0 1 0 0 0 0 0 1
A saída deste programa é:

O grafo dado é conexo.

PET-EPS Universidade Federal de Santa Catarina 7


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

5. PROGRAMA COM BASE NO ALGORITMO DE ROY

5.1. OBJETIVO:
O objetivo do programa baseado no algoritmo de Roy é encontrar todas
as componentes fortetmente conexas e a relação entre elas em um digrafo
qualquer.

5.2. ENTRADA:
O programa baseado no Algoritmo de Roy tem como entrada o número
de vértices do grafo e a matriz de adjacência correspondente, com as relações
entre estes vértices.

5.3. SAÍDA:
A saída deste algoritmo fornece o menor número de Componentes
Fortemente Conexas em que o digrafo pode ser subdividido, uma lista com todas
as Componentes Fortemente Conexas e uma nova matriz de adjacência
relacionado estes elementos.

5.4. EXEMPLO:
Consideremos o digrafo abaixo:

2
1
5

3 4

7 6

PET-EPS Universidade Federal de Santa Catarina 8


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

A execução do programa se inicia com o seguinte aviso:


Este programa é baseado no algoritmo de Roy e tem por objetivo
encontrar todas as componentes fortemente conexas e a relação
entre as mesmas em um digrafo qualquer.

Após pressionada qualquer tecla aparece um novo aviso na tela:


Digite o número de vértices do grafo a ser analisado

Digita-se o numero de vértices que será lido.


Após a entrada deste dado surgem diversos avisos como o seguinte:
Há alguma aresta orientada de 1 para 2?
Obs.: Onde os números variam de 1 até n para todos os elementos da matriz de
adjacência, exceto para os da diagonal principal:

Para este exemplo entra-se com a matriz de adjacência abaixo:


1 1 1 1 0 0 0
0 1 0 1 1 0 0
1 0 1 0 0 0 1
0 0 0 1 1 1 1
0 0 0 0 1 0 0
0 0 0 0 1 1 0
0 1 0 0 0 1 1

O processamento do problema pelo programa nos dá a seguinte saída:


O menor número de componentes fortemente conexas em que o grafo
pode ser subdividido é 4.

As componentes fortemente conexas do grafo são:


1 3
2 4 7
5
6

PET-EPS Universidade Federal de Santa Catarina 9


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

A matriz que relaciona as componentes fortemente conexas é a


seguinte:
1 1 1 1
0 1 1 1
0 0 1 0
0 0 1 1

Esta matriz corresponde respectivamentes às ligações das


componentes fortemente conexas anunciadas acima. O que corresponde ao
seguinte grafo:

1* 2*

3* 4*
Onde 1*, 2*, 3* e 4* correspondem às componentes fortemente
conexas (1 3), (2 4 7), (5) e (6) respectivamente.
Pode-se claramente observar que o grafo é irredutível a um menor
número de componentes fortemente conexas.

PET-EPS Universidade Federal de Santa Catarina 10


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

6. PROGRAMA DO CICLO HAMILTONIANO DE CUSTO


MÍNIMO

6.1. OBJETIVO:
O objetivo do programa do Ciclo Hamiltoniano de Custo Mínimo é
encontrar um caminho de custo pequeno passando por todos os vértices do grafo
não orientado a partir de um determinado vértice e voltar a este vértice ao final,
mas que não é garantidamente o mínimo, já que o processamento de todos os
ciclos possíveis é tecnicamente inviável.

6.2. ENTRADA:
O programa do Ciclo Hamiltoniano de Custo Mínimo tem como entrada
o número de vértices do grafo e a matriz de adjacência valorada correspondente,
que traz o custo das ligações entre os diversos vértices do grafo.

6.3. SAÍDA:
O programa do Ciclo Hamiltoniano de Custo Mínimo tem como saída o
custo baixio de um tour que passa por todos os vértices do grafo e a seqüência
dos vértices a serem seguidos para conseguir tal valor.

6.4. EXEMPLO:
Consideremos o grafo abaixo:

10 2

9 3

8 4

PET-EPS Universidade Federal de Santa Catarina 11


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

7 6 5

A matriz de adjacência valorada correspondente ao grafo é esta que se


vê a seguir.
0 3 @@@ 19 @@@ 18 4 20 @@@ @@@
@@@ 0 12 @@@ 20 @@@ 25 @@@ @@@ @@@
@@@ 12 0 5 18 @@@ 16 @@@ 35 39
19 @@@ 5 0 3 @@@ @@@ @@@ 28 @@@
@@@ 20 @@@ 3 0 14 @@@ 25 @@@ 17
18 @@@ 18 @@@ 14 0 19 @@@ @@@ 10
4 25 16 @@@ @@@ 19 0 14 @@@ 12
20 @@@ @@@ @@@ 25 @@@ 14 0 11 @@@
@@@ @@@ 35 28 @@@ @@@ @@@ 11 0 13
@@@ @@@ 39 @@@ 17 10 12 @@@ 13 0

Onde @@@ representa que não há a ligação indicada pela componente


que a posição na matriz representa.
Esses elementos devem ser representados na matriz como números
muito maiores do que os maiores valores apresentados na matriz.

A execução do programa se inicia com o seguinte aviso:


Este programa é baseado no algoritmo do custo mínimo e seu
objetivo é encontrar um caminho que ligue os pontos de um grafo
não orientado com baixo custo.

Pressione qualquer tecla para continuar.

Após pressionada qualquer tecla aparece um novo aviso na tela:


Digite o número de vértices.

Digita-se o numero de vértices que será lido.


Após a entrada deste dado surgem diversos avisos como o seguinte:
Qual o custo do caminho de 1 para 2?

PET-EPS Universidade Federal de Santa Catarina 12


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

Obs.: Onde os números variam de 1 até n para todos os elementos da matriz


triângulo superior de adjacência, já que a matriz é simétrica.

Para este exemplo entra-se com a matriz de adjacência mostrada


anteriormente.
Após a entrada do último dado (n-1,n), é mostrada a mensagem:
Digite o vértice inicial.

Entra-se com o vértice inicial e para exemplo mostrado iniciando-se


pelo vértice 5 tem-se como saída:
O caminho de menor custo a partir do vértice 5 é:
5 4 3 2 7 1 6 10 9 8

O custo mínimo encontrado para o tour a partir do vértice 5 é:126

PET-EPS Universidade Federal de Santa Catarina 13


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

7. PROGRAMA BASEADO NO ALGORITMO DE ROBERT E


FLORES

7.1. OBJETIVO:
O objetivo do programa baseado no algoritmo de Roberts & Flores é
descobrir se há algum caminho hamiltoniano entre os vértices do grafo. Caso
haja, o programa retorna uma ionformação de sua existência.

7.2. ENTRADA:
O programa baseado no algoritmo de Roberts & Flores tem como
entrada o número de vértices do grafo e a matriz de adjacência correspondente a
um grafo orientado.

7.3. SAÍDA:
A saída do processamento do programa de Roberts & Flores é um
vetor com um caminho hamiltoniano iniciado pelo vértice 1 ou uma informação de
que não foi possível encontrar nenhum caminho hamiltoniano no grafo dado.

7.4. EXEMPLO:
A execução do programa se inicia com o seguinte aviso:

Este programa é baseado no algoritmo de Roberts & Flores e tem por


objetivo encontrar algum caminho hamiltoniano existente em um
digrafo a partir do vértide 1, caso o grafo seja conexo

Pressione qualquer tecla para continuar.

Digita-se o numero de vértices que será lido.


Após a entrada deste dado surgem diversos avisos como o seguinte:
Há alguma aresta oreintada de 1 para 2?

PET-EPS Universidade Federal de Santa Catarina 14


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

Obs.: Onde deve-se digitar 1 para resposta afirmativa e 0 para negativa


e os números variam de 1 até n para todos os elementos da matriz de adjacência.

Como exemplo tomemos o grafo abaixo:


1 2

3
6

O processamento dos dados referentes a este grafo dá como solução


as mensagens abaixo:
Uma solução viável foi encontrada:

O caminho encontrado foi o segiunte:


1 2 5 3 4 6

PET-EPS Universidade Federal de Santa Catarina 15


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

8. PROGRAMA BASEADO NO ALGORITMO DE FLOYD

8.1. OBJETIVO:
O programa baseado no algoritmo de Floyd faz diversas iterações com
a matriz de adjacência inicial com a finalidade de encontrar o menor custo entre
dois pontos quaisquer.

8.2. ENTRADA:
A entrada deste programa é o número de vértices e a matriz de
adjacência valorada inicial sendo que os valores das conexões inexistentes
devem ser substituídos por valores muito maiores do que o maior valor entre
todas as arestas.

8.3. SAÍDA:
Como saída o programa nos fornece uma matriz de adjacência
valorada mostrando o menor custo entre dois pontos quaisquer, sem que indique
contudo o caminho entre os pontos indicados para que se chegue a este valor.

8.4. EXEMPLO:

Tomemos como exemplo o grafo abaixo:


1 2

3
6

PET-EPS Universidade Federal de Santa Catarina 16


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

Consideremos como sendo a matriz de adjacência valorada deste grafo


esta que se segue:

0 5 ∞ ∞ ∞ ∞
∞ 0 ∞ ∞ 15 ∞
∞ 8 0 10 ∞ ∞
∞ ∞ 8 0 ∞ 20
∞ ∞ 14 9 0 ∞
8 12 ∞ ∞ ∞ 0

A inicialização do programa se faz com o seguinte anuncio:


Este programa é baseado no algritmo de Floyd e seu objetivo é
encontra o menor valor do caminho entre um vértice e outro
qualquer, diretamente ou não.

Pressionando-se qualquer tecla o novo anuncio que surge é:


Digite o número de vértices do grafo que se quer analisar:

Após a entrada deste dado surgem vários anuncios como o que segue:
Qual o custo da ligação direta entre os vértices 1 e 2?

Obs1.: Onde os números variam entre todas as posições do grafo,


exceto pela diagonal principal e o valor 1 é usado para resposta afirmativa e 0
para a negativa.
Obs2.:Deve-se lembrar que os vértices que não tiverem ligações
diretas, cuja representação de valor de ligação é ∞, devem ter arestas fictícias
valoradas com valores de ordem muito maior do que o maior valor dentre as
arestas existentes.

Como resultado do processamento deste programa temos:

PET-EPS Universidade Federal de Santa Catarina 17


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

A matriz que representa o menor custo entre os vértices do


grafo dado é:

0 5 34 29 20 49
52 0 29 24 15 44
38 8 0 10 23 30
28 16 8 0 31 20
37 22 14 9 0 44
8 12 41 36 27 0

PET-EPS Universidade Federal de Santa Catarina 18


noções de teoria dos grafos através de programas em linguagem turbo-pascal 7.0

9. BIBLIOGRAFIA

RABUSQUE, Márcia Aguiar. Introdução à teoria dos grafos. Florianópolis: ed


UFSC, 1992. 173p.

PET-EPS Universidade Federal de Santa Catarina 19

Você também pode gostar