Prévia do material em texto
<p>Razer Anthom Nizer Rojas Montaño</p><p>TEORIA DOS GR</p><p>AFOS</p><p>Razer Anthom</p><p>N</p><p>izer Rojas M</p><p>ontaño</p><p>Código Logístico</p><p>59398</p><p>Fundação Biblioteca Nacional</p><p>ISBN 978-85-387-6636-0</p><p>9 7 8 8 5 3 8 7 6 6 3 6 0</p><p>Teoria dos Grafos</p><p>Razer Anthom Nizer Rojas Montaño</p><p>IESDE BRASIL</p><p>2020</p><p>© 2020 – IESDE BRASIL S/A.</p><p>É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do detentor dos</p><p>direitos autorais.</p><p>Projeto de capa: IESDE BRASIL S/A. Imagem da capa: EnvatoElements</p><p>Todos os direitos reservados.</p><p>IESDE BRASIL S/A.</p><p>Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200</p><p>Batel – Curitiba – PR</p><p>0800 708 88 88 – www.iesde.com.br</p><p>CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO</p><p>SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ</p><p>M765t</p><p>Montaño, Razer Anthom Nizer Rojas</p><p>Teoria dos grafos / Razer Anthom Nizer Rojas Montaño. - 1. ed. -</p><p>Curitiba [PR] : IESDE, 2020.</p><p>126 p. : il.</p><p>Inclui bibliografia</p><p>ISBN 978-85-387-6636-0</p><p>1. Teoria dos grafos. 2. Algoritmos I. Título.</p><p>20-63940 CDD: 511.5</p><p>CDU: 519.17</p><p>Razer Anthom</p><p>Nizer Rojas Montaño</p><p>Doutor em Ciência da Computação e mestre em</p><p>Informática pela Universidade Federal do Paraná (UFPR),</p><p>na área de inteligência computacional. Graduado</p><p>bacharel em Informática pela mesma instituição.</p><p>Atualmente, é professor do curso superior de</p><p>Tecnologia em Análise e Desenvolvimento de Sistemas</p><p>e coordenador acadêmico do Setor de Educação</p><p>Profissional e Tecnológica da UFPR. Tem experiência</p><p>nas áreas de análise, projeto e desenvolvimento de</p><p>software (com ênfase na plataforma Java e aplicações</p><p>corporativas), aprendizado de máquina (regressão,</p><p>classificação, clusterização, regras de associação,</p><p>linguagem R, avaliação de modelos), planejamento em</p><p>inteligência artificial (com ênfase em lógica matemática,</p><p>SAT, redes de Petri e raciocínio sobre ações) e aplicações</p><p>em mensuração florestal.</p><p>Agora é possível acessar os vídeos do livro por</p><p>meio de QR codes (códigos de barras) presentes</p><p>no início de cada seção de capítulo.</p><p>Acesse os vídeos automaticamente, direcionando</p><p>a câmera fotográ�ca de seu smartphone ou tablet</p><p>para o QR code.</p><p>Em alguns dispositivos é necessário ter instalado</p><p>um leitor de QR code, que pode ser adquirido</p><p>gratuitamente em lojas de aplicativos.</p><p>Vídeos</p><p>em QR code!</p><p>SUMÁRIO</p><p>1 Introdução ao estudo dos grafos 9</p><p>1.1 História e teoria dos grafos 9</p><p>1.2 Noções e definições básicas 12</p><p>1.3 Tipos de grafos 14</p><p>1.4 Vizinhança e grau 17</p><p>1.5 Isomorfismo 21</p><p>1.6 Representação computacional 27</p><p>1.7 Aplicações dos grafos 29</p><p>2 Conectividade 34</p><p>2.1 Grafos conexos e componentes 34</p><p>2.2 Caminhos e circuitos 36</p><p>2.3 Subgrafos 40</p><p>2.4 Cortes 42</p><p>3 Caminho mínimo e árvores geradoras 51</p><p>3.1 Busca em grafos e árvore geradora 51</p><p>3.2 Árvore Geradora Mínima 62</p><p>3.3 Caminho Mínimo 65</p><p>4 Grafos eulerianos e hamiltonianos 74</p><p>4.1 Grafos eulerianos 74</p><p>4.2 Grafos hamiltonianos 84</p><p>5 Problemas em Grafos 97</p><p>5.1 Cliques e Conjuntos Estáveis 97</p><p>5.2 Cliques Máximas 101</p><p>5.3 Coberturas 104</p><p>5.4 Planaridade 106</p><p>5.5 Coloração 111</p><p>Gabarito 118</p><p>Agora é possível acessar os vídeos do livro por</p><p>meio de QR codes (códigos de barras) presentes</p><p>no início de cada seção de capítulo.</p><p>Acesse os vídeos automaticamente, direcionando</p><p>a câmera fotográ�ca de seu smartphone ou tablet</p><p>para o QR code.</p><p>Em alguns dispositivos é necessário ter instalado</p><p>um leitor de QR code, que pode ser adquirido</p><p>gratuitamente em lojas de aplicativos.</p><p>Vídeos</p><p>em QR code!</p><p>APRESENTAÇÃO</p><p>Vídeo A Teoria dos Grafos (TG) é uma área de estudo e pesquisa que</p><p>possibilita a resolução de problemas de diversos setores, como logística,</p><p>comunicações, tubulações, genética, química, entre outros. O objetivo da</p><p>TG é a representação de problemas, como por exemplo, as estruturas</p><p>matemáticas, chamadas de grafos, e a aplicação de soluções algorítmicas,</p><p>sempre considerando aspectos computacionais de desempenho, em</p><p>tempo de execução e armazenamento.</p><p>Na área de estudo dos grafos, pode-se abordar o assunto com viés</p><p>teórico ou algorítmico. Na abordagem teórica, tem-se um peso maior nos</p><p>aspectos matemáticos dos grafos, dos teoremas e das provas. Na abordagem</p><p>algorítmica, estudam-se os problemas, as maneiras de resolução (eficientes</p><p>ou não) e a implementação computacional dessas soluções.</p><p>Neste livro, buscou-se um equilíbrio entre a teoria, necessária para</p><p>o entendimento matemático dos grafos, e os algoritmos, que levam em</p><p>consideração sua composição computacional na solução de problemas.</p><p>Os capítulos estão organizados de modo a apresentar os conceitos e</p><p>problemas gradualmente.</p><p>Inicia-se com os conceitos básicos necessários para equalizar o</p><p>vocabulário e mostrar a estrutura matemática de um grafo, bem como sua</p><p>história. Na sequência, conceitos mais avançados são expostos e alguns</p><p>algoritmos são apresentados, além de teoremas pertinentes ao assunto.</p><p>Em suma, essa obra traz informações básicas para a compreensão geral da</p><p>Teoria dos Grafos em todas as áreas em que sua aplicação é possível.</p><p>Bons estudos!</p><p>Introdução ao estudo dos grafos 9</p><p>1</p><p>Introdução ao estudo dos grafos</p><p>Neste capítulo, será introduzido o estudo sobre a teoria dos grafos, o</p><p>qual está organizado da seguinte maneira: na Seção 1.1 é apresentado o</p><p>surgimento da teoria dos grafos, mostrando que a alavanca para o seu</p><p>desenvolvimento foram problemas reais que os cientistas tiveram na épo-</p><p>ca. Na Seção 1.2 abordam-se as noções e definições básicas dos grafos,</p><p>sua caracterização matemática e sua representação gráfica. Na Seção 1.3</p><p>são mostrados os vários tipos de grafos e suas definições. Já os conceitos</p><p>de vizinhança, grau e caminhos serão tratados na Seção 1.4. Na Seção 1.5</p><p>exploram-se o conceito de isomorfismo em grafos e as suas caracterizações.</p><p>Para executar algoritmos em grafos, também será necessário o estudo</p><p>das representações computacionais, as quais estão descritas na Seção</p><p>1.6. Por fim, na Seção 1.7 são abordadas algumas aplicações de grafos em</p><p>problemas do mundo real.</p><p>1.1 História e teoria dos grafos</p><p>Vídeo Um grafo é uma estrutura que formaliza relações de interdependência exis-</p><p>tentes entre os elementos de um conjunto e que possui uma representação grá-</p><p>fica facilitadora do entendimento e desenvolvimento de alguns conceitos. Assim,</p><p>os componentes de um grafo que representam os elementos de um conjunto em</p><p>questão são diagramados como pontos e denominados como vértices ou nós. Para</p><p>representar as relações entre os elementos do conjunto, traçam-se setas interli-</p><p>gando os vértices, as quais são denominadas arestas ou arcos.</p><p>Os grafos podem ser usados para resolver problemas em diversas áreas, por</p><p>exemplo, na química, em que a estrutura de uma molécula pode ser represen-</p><p>tada por meio de um grafo; nas redes de rotas de transporte (estradas, logís-</p><p>tica etc.); nas redes de comunicações (rede de computadores local ou mesmo</p><p>na internet); na distribuição de produtos e serviços, caso das tubulações de gás,</p><p>água, petróleo etc.</p><p>De acordo com Szwarcfiter (2018), o estudo dos grafos surgiu com o proble-</p><p>ma das sete pontes de Königsberg. Em um artigo publicado por Leonhard Euler</p><p>(1707–1783), em 1736, o autor discorreu sobre o assunto, apresentando uma so-</p><p>lução negativa, a qual originou a teoria dos grafos. Königsberg – que até 1945 foi</p><p>território da Prússia – é uma cidade cortada pelo Rio Prególia, com duas grandes</p><p>ilhas e sete pontes entre elas. A região foi bombardeada durante a Segunda Guerra</p><p>Mundial e tomada pelos russos, quando foi renomeada para Kaliningrado. Durante</p><p>10 Teoria dos Grafos</p><p>esse período, duas das sete pontes existentes foram destruídas. Observe a seguir o</p><p>mapa das pontes em 1652 (as em vermelho foram destruídas).</p><p>Se</p><p>rg</p><p>ey</p><p>M</p><p>er</p><p>ku</p><p>lo</p><p>v/</p><p>Sh</p><p>ut</p><p>te</p><p>rs</p><p>to</p><p>ck</p><p>Em 1736, Euler provou que não havia a possibilidade de passar por todas essas</p><p>pontes sem repetir qualquer uma delas. Para comprovar essa tese, o estudioso</p><p>desenhou o problema das pontes usando um diagrama como este:</p><p>v4</p><p>v1</p><p>v2</p><p>v3</p><p>Grafo do problema das sete pontes</p><p>cA ≥ k. O valor k é importante, pois</p><p>se um grafo é k-conexo em vértices (arestas), não existe corte de vértices (arestas)</p><p>menor que k. O grafo G da Figura 19 é 1-conexo em vértices e 1-conexo em arestas.</p><p>Quando um grafo é 2-conexo também é chamado biconexo.</p><p>Para um grafo G = (V, A) e um corte de arestas de G, A’ ⊆ A, sempre é possível</p><p>encontrar um corte de vértices V’ de tamanho |V’| ≤ |A’|. Para isso, escolhe-se para</p><p>fazer parte de V’ um subconjunto de vértices tal que, para toda aresta a ∈ A’, A inci-</p><p>de neste vértice. Por exemplo, seja o grafo G da Figura 23.</p><p>Figura 23</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v5</p><p>v1</p><p>v2</p><p>v4</p><p>v3</p><p>Um corte de arestas é o conjunto c1 = {(v4, v6), (v3, v6), (v5, v6)}. A</p><p>eliminação dessas arestas gera o grafo G’ da Figura 24.</p><p>Assim, consegue-se obter um corte de vértices a partir de c1 eli-</p><p>minando um subconjunto dos vértices cujas arestas em c1 incidem.</p><p>Os vértices em c1 são v4, v3, v5, v6. Observe que eliminando v4, v3</p><p>tem-se o grafo da Figura 25, desconexo, e que não há subconjunto</p><p>de c2 = {v4, v3} que desconecte o grafo, sendo esse, portanto, um</p><p>corte de vértices. Percebe-se também que o |c2| ≤ |c1|.</p><p>Posto isso, conclui-se que cv ≤ cA, a conectividade de vértices de</p><p>um grafo qualquer é sempre menor ou igual à sua conectividade de</p><p>arestas. Dado um grafo G não completo, cujo vértice v possui grau</p><p>mínimo, é possível desconectar G removendo grau(v) arestas, que</p><p>são as arestas que incidem em v. Por exemplo, uma vez que o grafo</p><p>G da Figura 23 é um vértice de grau mínimo, ele é v1, sendo grau</p><p>(v1) = 3. Assim, é possível desconectar o grafo G removendo todas</p><p>as arestas incidentes a v1; nesse caso, são três arestas, a saber: (v1,</p><p>v2), (v1, v3), (v1, v4).</p><p>Portanto, sendo v um vértice de grau mínimo, grau(v) ≥ cA ≥ cv. Se</p><p>o grafo G for um grafo completo (G = Kn), então todos seus vértices</p><p>possuem o mesmo grau n – 1 (pois estão conectados com todos os</p><p>demais vértices) e, portanto, grau(v) = cA = cv = n – 1.</p><p>Figura 24</p><p>Grafo G’</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v5</p><p>v1</p><p>v2</p><p>v4</p><p>v3</p><p>Figura 25</p><p>Grafo com vértices retirados</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v5</p><p>v1</p><p>v2</p><p>Conectividade 45</p><p>Se um vértice de um grafo, ao ser removido, o desconecta, o vértice é chama-</p><p>do de articulação. Igualmente, se uma aresta do grafo, quando removida, desco-</p><p>necta o grafo, então essa aresta é chamada ponte. A Figura 26 mostra um grafo</p><p>com articulações e uma ponte.</p><p>Figura 26</p><p>Grafo com ponte e articulações</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v7v5v2</p><p>v8v1 v4v3</p><p>Articulações</p><p>Ponte</p><p>Dessa maneira, um grafo é biconexo em vértices se, e somente se, não possuir</p><p>articulações. Isso acontece, pois, se o grafo possuir uma articulação, significa que</p><p>o vértice, se removido, desconecta o grafo, portanto ele seria 1-conexo. Analoga-</p><p>mente, um grafo é biconexo em arestas se, e somente se, não possuir pontes, o</p><p>raciocínio é o mesmo (SZWARCFITER, 2018).</p><p>Com o conceito de caminho, consegue-se dizer que em um grafo conexo G = (V, A),</p><p>|V| > 2, as seguintes afirmações (SZWARCFITER, 2018):</p><p>1. Um vértice v ∈ V é articulação de G se, e somente se, existirem vértices v1, v2 ≠</p><p>v, tais que em todo caminho entre v1 e v2 em G, v está presente.</p><p>2. Uma aresta (v1, v2) ∈ A é ponte se, e somente se, (v1, v2) for o único caminho</p><p>simples entre v1 e v2.</p><p>Tirando a prova</p><p>Observe, a seguir, as provas dessas afirmações.</p><p>Afirmação 1: um vértice v ∈ V é articulação de G se, e somente se, existirem</p><p>vértices v1, v2 ≠ v, tais que em todo caminho entre v1 e v2, em G, v está presente.</p><p>Prova de ida →: assumimos que v é uma articulação, portanto, retirar v de G,</p><p>pela definição de articulação, desconecta o grafo. Se o grafo G’ resultante da re-</p><p>moção de v é desconexo, então, é formado por, pelo menos, duas componentes</p><p>conexas, dois vértices (v1 e v2) em componentes conexas diferentes. Então, como v</p><p>é articulação, qualquer caminho entre v1 e v2 passa por v.</p><p>Prova de volta ← : assumimos dois vértices v1 e v2 de G, diferentes de v, tal que</p><p>todo caminho entre v1 e v2 passa por v. Assim, se todo caminho entre v1 e v2 passa</p><p>por v, significa que se o vértice v for removido do grafo G, então, v1 não é mais al-</p><p>cançável a partir de v2 (e vice-versa, assumindo G não dirigido), isto é, não há mais</p><p>caminho entre dois vértices do grafo, o que caracteriza um grafo desconexo. Um</p><p>vértice que quando removido desconecta o grafo, é a definição de articulação, por-</p><p>tanto, v é uma articulação G.</p><p>Sempre que se deve provar uma</p><p>afirmação que contém se, e so-</p><p>mente se, a prova é formada por</p><p>duas partes: a ida (→) e a volta</p><p>(←). Por exemplo, queremos</p><p>provar a afirmação: Chove se, e</p><p>somente se, faz frio. A ida significa</p><p>provar que se chove, então faz frio.</p><p>Já a volta significa provar que se</p><p>faz frio, então chove (GERSTING;</p><p>IÓRIO, 2012).</p><p>Importante</p><p>46 Teoria dos Grafos</p><p>Afirmação 2: uma aresta (v1, v2) ∈ A é ponte se, e somente se, {v1, v2} for o único</p><p>caminho simples entre v1 e v2.</p><p>Prova de ida → : assumimos a aresta (v1, v2) ∈ A é ponte do grafo G e, portanto,</p><p>retirar essa aresta de G, pela definição de ponte, desconecta o grafo. Se o grafo G’</p><p>resultante da remoção de (v1, v2) é desconexo, então, v1 e v2 estão em componentes</p><p>conexas distintas. Assim, a aresta (v1, v2) é o único caminho simples entre v1 e v2.</p><p>Prova de volta ← : assumimos que a aresta a (v1, v2) ∈ A é o único caminho</p><p>simples entre v1 e v2. Como v1 e v2 são adjacentes (há uma aresta entre eles), ser o</p><p>único caminho simples significa que não se tem arestas repetidas entre v1 e v2, nem</p><p>outro caminho entre eles passando por outros vértices. Assim, remover a aresta</p><p>(v1, v2) de G faz com que v1 não seja mais alcançável a partir de v2 (e vice-versa, as-</p><p>sumindo um grafo não dirigido), portanto, o grafo se torna desconexo. Uma aresta</p><p>que quando removida do grafo o desconecta é a definição de ponte, portanto, (v1,</p><p>v2), é ponte de G.</p><p>Para um grafo G, definem-se componentes biconexas aos subgrafos maximais</p><p>de G que sejam biconexos em vértices ou que sejam isomorfos a K2. As componen-</p><p>tes biconexas são também chamadas de blocos do grafo. Se um grafo G for bicone-</p><p>xo, ele só possui um bloco, que é o próprio G. A Figura 27 mostra todos os blocos</p><p>do grafo da Figura 26 (FEOFILOFF, 2020).</p><p>Figura 27</p><p>Bloco do grafo</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v5</p><p>v4</p><p>v4v3</p><p>v2</p><p>v1 v3 v6</p><p>v7</p><p>v8</p><p>Por essa definição, percebe-se que cada aresta de um grafo pertence a exatamente</p><p>um bloco do grafo. Também percebe-se que um vértice é articulação do grafo se, e</p><p>somente se, pertencer a mais de um bloco do grafo.</p><p>Na Figura 27 é possível perceber que cada aresta faz parte de somente um bloco</p><p>do grafo e que os vértices v3, v4 e v6, que são articulações, são os únicos vértices que</p><p>aparecem em mais de um bloco.</p><p>A caracterização de corte de vértices e de arestas é importante para a aplica-</p><p>ção de grafos na modelagem de alguns problemas reais. Veja como exemplo uma</p><p>rede de computadores como a da Rede Nacional de Ensino e Pesquisa (RNP), or-</p><p>ganização responsável, entre outras coisas, pela manutenção da Rede Ipê – a rede</p><p>acadêmica brasileira que interliga universidades. A rede é formada por Pontos de</p><p>Presença (PoP) em cada uma das unidades da federação e esses pontos são conec-</p><p>tados por fibra ótica de alta velocidade (REDE..., 2020). Um dos problemas em que</p><p>grafos são aplicáveis, apesar de nesse caso ser uma modelagem simples, é para</p><p>Conectividade 47</p><p>verificar se há algum ponto em que essa rede pode ficar desconectada se algum</p><p>link de internet deixar de funcionar.</p><p>Modelar essa rede como um grafo é simplesmente assumir que cada PoP é um vér-</p><p>tice do grafo e cada link de internet entre os PoPs é uma aresta.</p><p>Figura 28</p><p>Mapa de tráfego da Rede Ipê</p><p>Fonte: RNP, 2020b.</p><p>Esta rede é mapeada pelo grafo da Figura 29.</p><p>Figura 29</p><p>Rede Ipê mapeada por um grafo</p><p>Fonte: Elaborada pelo autor com base em RNP, 2020b.</p><p>RO</p><p>AC</p><p>RS</p><p>SC</p><p>MT</p><p>MS</p><p>PR BA SE AL</p><p>AP</p><p>PE PB2</p><p>PB1</p><p>MARR</p><p>AM</p><p>PA</p><p>PI</p><p>SP RJ ES</p><p>GO</p><p>TO</p><p>DF MG CE RN</p><p>48 Teoria dos Grafos</p><p>Encontrar um link de rede</p><p>que deixa algum estado desconectado é o mesmo</p><p>que encontrar um corte de arestas no grafo que o torna desconexo. Esse grafo,</p><p>em especial, é 1-conexo, pois se for retirada a aresta (PA, AP), o grafo se torna</p><p>desconexo. Assim, se cair o link de internet entre os PoPs Pará e Amapá, o Amapá</p><p>ficará desconectado do resto da rede. Com esse resultado, os engenheiros podem</p><p>planejar expansões na rede, inclusive como um caminho alternativo entre PA e AP,</p><p>para que haja redundância na rede.</p><p>Na Figura 28 percebe-se que o link entre PE e CE está em preto que, segundo</p><p>a legenda, significa que não há tráfego entre esses dois pontos. Isso significa que</p><p>qualquer comunicação entre MT e MS deve passar por outro caminho. Entre os</p><p>possíveis caminhos estão: (MT, GO), (GO, DF), (DF, SP), (SP, PR), (PR, MS).</p><p>CONSIDERAÇÕES FINAIS</p><p>Este capítulo apresentou conceitos relativos à conectividade de grafos, como gra-</p><p>fos conexos e desconexos, as componentes conexas e suas caracterizações. Também</p><p>foram mostrados os conceitos de caminhos e ciclos, que são de grande importância</p><p>para a aplicação de grafos em problemas reais. Os conceitos de grafos hamiltonianos</p><p>e eulerianos foram definidos sobre caminhos e ciclos, bem como em digrafos (grafos</p><p>dirigidos ou orientados).</p><p>Ao final, foram expostas as definições de subgrafos, vértices de corte e arestas de</p><p>corte. Em especial, os conceitos de pontes e articulações, que também são de grande</p><p>importância no mapeamento de problemas reais para grafos. O problema de busca</p><p>de pontes em grafos foi aplicado à Rede Ipê, para descobrir fraquezas na rede, em</p><p>que a queda de um link de internet entre duas instituições pode deixar parte da rede</p><p>desconectada.</p><p>ATIVIDADES</p><p>1. Dado o grafo a seguir, dê suas componentes conexas.</p><p>v1</p><p>v5</p><p>v3</p><p>v4</p><p>v2</p><p>v6</p><p>Conectividade 49</p><p>2. Dado o digrafo a seguir, encontre um caminho entre v3 e v4.</p><p>v2v1</p><p>v6</p><p>v3</p><p>v5</p><p>v4</p><p>3. Dado o grafo a seguir, encontre um ciclo euleriano.</p><p>v4</p><p>v2</p><p>v5</p><p>v1</p><p>v3</p><p>4. Dado o grafo semi-hamiltoniano a seguir, explique o que precisa ser feito para que</p><p>se torne um grafo hamiltoniano?</p><p>v4</p><p>v2</p><p>v3v1</p><p>5. Dado o grafo a seguir, dê o subgrafo induzido contendo os vértices v1, v2 e v5.</p><p>v4</p><p>v2</p><p>v5</p><p>v1</p><p>v3</p><p>50 Teoria dos Grafos</p><p>6. Dado o grafo a seguir, apresente todas as suas componentes biconexas.</p><p>v4</p><p>v1</p><p>v3</p><p>v2</p><p>v5</p><p>v6</p><p>v7</p><p>v8</p><p>v8</p><p>REFERÊNCIAS</p><p>BOAVENTURA NETTO, P. O.; JURKIEWICZ, S. Grafos: introdução e prática. São Paulo: Blucher, 2009.</p><p>FEOFILOFF, P. Instituto de Matemática e Estatística – USP, 2020. Algoritmos para grafos via Sedgewick.</p><p>Disponível em: https://www.ime.usp.br/~pf/algoritmos_para_grafos/. Acesso em: 14 maio 2020.</p><p>FEOFILOFF, P.; KOHAYAKAWA, Y.; WAKABAYASHI, Y. Uma introdução sucinta à Teoria dos Grafos. São</p><p>Paulo: Instituto de Matemática e Estatística – USP, 2011. Disponível em: https://www.ime.usp.br/~pf/</p><p>teoriadosgrafos/. Acesso em: 14 maio 2020.</p><p>GERSTING, J. L.; IÓRIO, V. de M. Fundamentos matemáticos para a ciência da computação: um tratamento</p><p>moderno de matemática discreta. 5. ed. Rio de Janeiro: LTC, 2012.</p><p>NICOLETTI, M. C; HRUSCHKA JUNIOR, E. R. Fundamentos da teoria dos grafos para computação. 3. ed. São</p><p>Paulo: LTC, 2018.</p><p>RNP. Rede Nacional de ensino e pesquisa, 2020a. Página inicial. Disponível em: https://www.rnp.br.</p><p>Acesso em: 14 maio 2020.</p><p>RNP. Panorama de Tráfego da Rede Ipê. Rede Nacional de ensino e pesquisa, 2020b. Disponível em: https://</p><p>www.rnp.br/sistema-rnp/ferramentas/panorama-de-trafego. Acesso em: 15 de abr. 2020.</p><p>SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.</p><p>Caminho mínimo e árvores geradoras 51</p><p>3</p><p>Caminho mínimo e</p><p>árvores geradoras</p><p>Assumindo que problemas do mundo real podem ser mapeados</p><p>para grafos, a resolução, às vezes, exige procedimentos que variam des-</p><p>de uma busca simples até o encontro de outros subgrafos com algumas</p><p>características.</p><p>Nesse sentido serão apresentados na Seção 3.1 deste capítulo os al-</p><p>goritmos de busca em profundidade e largura dos grafos, indicando que</p><p>esses conseguem encontrar as árvores geradoras dos grafos. Se os grafos</p><p>possuem pesos, será explorado na Seção 3.2 o problema de encontrar</p><p>a árvore geradora mínima, por meio dos algoritmos de Prim e Kruskal.</p><p>Por fim, na Seção 3.3 será trabalhado o problema do caminho mínimo, isto</p><p>é, encontrar o menor caminho entre dois vértices, que pode ser resolvido</p><p>pelo algoritmo de Dijkstra.</p><p>3.1 Busca em grafos e árvore geradora</p><p>Vídeo Muitos problemas em grafos são resolvidos por procedimentos</p><p>com base em algoritmos de busca ou suas adaptações, desde encon-</p><p>trar um caminho entre dois vértices até achar o emparelhamento</p><p>máximo de um grafo.</p><p>Os procedimentos de busca em grafos se resumem em caminhar</p><p>de maneira sistemática pelo grafo, considerando algumas condições</p><p>para decidir se o problema foi resolvido. Em termos de busca, o ob-</p><p>jetivo é visitar todos os vértices e todas as arestas, evitando repetir a</p><p>passagem nesses elementos. Essa questão é crucial na resolução de</p><p>problemas, pois garante que não haja retrabalho, mas também exi-</p><p>ge a necessidade de recursos adicionais para marcar quando uma</p><p>aresta ou um vértice já foi visitado. Assim, um vértice é dito marcado</p><p>quando já foi visitado pelo procedimento de busca e, portanto, é dis-</p><p>tinto dos vértices não marcados.</p><p>O Algoritmo 1 1 apresenta um algoritmo básico de busca em</p><p>grafos, que tem como entrada um grafo conexo com todos os seus</p><p>vértices desmarcados. No primeiro passo, escolhe-se um vértice</p><p>para ser o inicial, marcando-o. Já no segundo, elege-se um vértice</p><p>Um algoritmo é uma</p><p>sequência finita de passos</p><p>usada para resolver algum</p><p>problema. Os algoritmos</p><p>são independentes de lin-</p><p>guagens de programação e</p><p>podem ser codificados em</p><p>qualquer plataforma.</p><p>ZIVIANI, N. Projeto de Algoritmos</p><p>Com Implementações em Pascal e C.</p><p>Pioneira Thomson Learning. São Paulo:</p><p>2a ed. 2004.</p><p>1</p><p>Um emparelhamento M, em um</p><p>grafo não dirigido, é um conjunto de</p><p>arestas em que todo vértice do grafo</p><p>incide em, no máximo, um elemento</p><p>de M (FEOFILOFF, 2020). Encontrar</p><p>o emparelhamento máximo de</p><p>um grafo pode ser útil para a</p><p>determinação de rotas de veículos, a</p><p>designação de tarefas etc.</p><p>Saiba mais</p><p>52 Teoria dos Grafos</p><p>marcado v1, que possua um vértice incidente v2, tal que a aresta (v1, v2) ∈ A e ain-</p><p>da não tenha sido selecionada. Em seguida, o vértice v2 é marcado, se ainda não</p><p>estiver. Esse processo termina quando todas as arestas de G forem selecionadas.</p><p>Sempre que a aresta (v1, v2) é selecionada com base no vértice marcado v1, ela</p><p>é dita explorada. Um vértice se denomina explorado quando todas as arestas in-</p><p>cidentes forem exploradas. Nesse processo, é possível que um vértice seja alcan-</p><p>çado várias vezes pelo procedimento de busca, então, este será chamado visitado.</p><p>O mesmo conceito se aplica a arestas, caso precisem ser alcançadas várias vezes</p><p>pelo procedimento.</p><p>Algoritmo 1</p><p>Busca em grafo</p><p>Dados: Grafo G = (V, A)</p><p>1 Desmarcar todos os vértices</p><p>2 Escolher o vértice inicial</p><p>3 Marcar o vértice inicial</p><p>4 ENQUANTO existir algum vértice v1 marcado e com aresta (v1, v2) não explorada FAÇA</p><p>5 Escolher o vértice v1</p><p>6 Explorar a aresta (v1, v2)</p><p>7 SE v2 não está marcado ENTÃO</p><p>8 Marcar v2</p><p>9 FIM SE</p><p>10 FIM ENQUANTO</p><p>Fonte: Adaptado de Szwarcfiter, 2018.</p><p>Percebe-se que no Algoritmo 1 há vários pontos de escolha que ficaram em</p><p>aberto, a saber:</p><p>• Qual vértice inicial escolher?</p><p>• Qual vértice marcado v1 escolher?</p><p>• Qual aresta incidente ao vértice marcado v1, (v1, v2), escolher?</p><p>A maneira com a qual essas escolhas são feitas determina o tipo de busca. O cri-</p><p>tério sobre qual vértice v1 marcado escolher indica se a busca é em profundidade</p><p>ou em largura. Por exemplo, se o vértice selecionado for o último analisado, então,</p><p>é uma busca em profundidade. Já se o vértice priorizar os vértices no mesmo nível</p><p>(distância da raiz) antes de escolher os vértices do nível superior, então, é uma</p><p>busca em largura.</p><p>A busca em profundidade (do inglês depth-first search – DPS) ocorre quando o</p><p>próximo</p><p>vértice marcado a ser escolhido for o mais recentemente alcançado pelo</p><p>algoritmo de busca. Esse critério garante que a determinação do vértice seja única</p><p>e sem ambiguidade.</p><p>Basicamente, ela pode ser implementada de duas formas: recursivamente ou</p><p>pelo uso de uma pilha. O Algoritmo 2 mostra o pseudocódigo recursivo, em que</p><p>Adj(v) é o conjunto de todos os vértices adjacentes a v.</p><p>Caminho mínimo e árvores geradoras 53</p><p>Algoritmo 2</p><p>Busca em profundidade recursiva</p><p>Dados: Grafo conexo G = (V, A)</p><p>1 PROCEDIMENTO Busca (v, pai)</p><p>2 Marcar v</p><p>3 PARA w ∊ Adj(v) FAÇA</p><p>4 SE w não está marcado ENTÃO</p><p>5 Visitar aresta de árvore (v, w)</p><p>6 Busca (w, v)</p><p>7 SENÃO</p><p>8 SE w ≠ pai ENTÃO</p><p>9 Visitar aresta de retorno (v, w)</p><p>10 FIM SE</p><p>11 FIM SE</p><p>12 FIM PARA</p><p>13 FIM PROCEDIMENTO</p><p>14</p><p>15 Desmarcar todos os vértices de G</p><p>16 Escolher um vértice s</p><p>17 Busca (s, NULO)</p><p>Fonte: Adaptado de Szwarcfiter, 2018.</p><p>Convém ressaltar que visitar uma aresta significa efetuar uma operação espe-</p><p>cífica, por exemplo, adicionar em outro grafo. O procedimento Busca (v, pai)</p><p>recebe como parâmetros o vértice a ser analisado e o vértice anterior da busca, o</p><p>qual está sendo chamado de pai, para facilitar a compreensão.</p><p>O procedimento Busca executa algumas atividades, como:</p><p>• Linha 2: marca o vértice recebido para garantir que ele não seja novamente</p><p>escolhido.</p><p>• Linha 3: o vértice que está sendo processado retorna todos os seus vértices</p><p>adjacentes e, para cada um deles, é feita uma análise.</p><p>• Linhas 4, 5 e 6: se o vértice adjacente não está marcado, significa que ain-</p><p>da não foi processado, desse modo, visita a aresta e invoca recursivamen-</p><p>te o procedimento Busca, passando como parâmetros: o vértice adjacente</p><p>encontrado e o próprio vértice que estava sendo processado como pai. Ao</p><p>retornar dessa chamada recursiva, passa-se a processar o próximo vértice</p><p>adjacente.</p><p>• Linhas 7, 8 e 9: se o vértice adjacente está marcado, é necessário verificar se</p><p>ele não é igual ao seu próprio pai. Se for, ignora-se, pois acabou de ser pro-</p><p>cessado. Se não for, visita-se a aresta, chamada de aresta de retorno.</p><p>Especialmente na linha 6, o procedimento Busca (w, v) é invocado recursi-</p><p>vamente para cada vértice w adjacente a v, dado pelo laço da linha 3. Isso significa</p><p>que uma nova busca inicia, sendo o vértice w escolhido para ser o ponto inicial des-</p><p>sa busca. Quando há retorno de uma chamada recursiva, o processo é denomina-</p><p>do também de backtracking, isto é, o processo retorna para continuar o algoritmo</p><p>com os próximos vértices adjacentes.</p><p>54 Teoria dos Grafos</p><p>No grafo da Figura 1, por exemplo, se fosse assumido o vértice v1 como pon-</p><p>to inicial, na linha 3 seriam retornados os vértices adjacentes {v2, v4, v5}. O proce-</p><p>dimento é invocado recursivamente usando v2. Ao retornar, isto é, ao executar o</p><p>backtracking, ainda faltarão os vértices v4 e v5 para serem processados, os quais</p><p>serão usados nas próximas interações do laço.</p><p>As arestas visitadas são classificadas de duas formas: arestas de árvore e</p><p>arestas de retorno. As primeiras são as arestas encontradas na árvore da bus-</p><p>ca em profundidade. Uma aresta (v1, v2) é uma aresta de árvore se o vértice v2 foi</p><p>alcançado pela primeira vez pela aresta (v1, v2). Já as segundas são arestas (v1, v2)</p><p>que conectam o vértice v1 a um antecessor, nesse caso, v2, que já foi explorado.</p><p>O procedimento Busca, dentro de seu laço da linha 3, possui uma condicional</p><p>para verificar qual tipo de aresta está tratando. Se forem consideradas somente as</p><p>arestas de árvore (linha 5 do Algoritmo 2), por exemplo, para a construção de um</p><p>outro grafo (nesse caso, um subgrafo), o grafo resultante claramente não teria ci-</p><p>clos, pois nesse trecho, o algoritmo nunca visita uma aresta adjacente a um vértice</p><p>já marcado. Assim, é possível dizer que o algoritmo constrói uma árvore de busca</p><p>em profundidade.</p><p>O vértice escolhido como sendo o primeiro a ser visitado, tam-</p><p>bém, é chamado de raiz da árvore de busca em profundidade.</p><p>Para ilustrar e execução do Algoritmo 2, observe o grafo da Figura 1.</p><p>O algoritmo começa desmarcando todos os vértices e escolhe</p><p>qualquer um destes para ser a raiz da busca. Aqui, será selecionado</p><p>o vértice v1, mas poderia ser qualquer um, pois não há indicação no</p><p>algoritmo. Ao ser chamado pela primeira vez, o procedimento é in-</p><p>vocado com Busca (v1, NULO), pois nesse momento não há ne-</p><p>nhum vértice anterior a v1 na busca, nesse momento.</p><p>Ao entrar no procedimento, o vértice v1 é marcado e todos os vér-</p><p>tices adjacentes são retornados, a saber: {v2, v4, v5}. Isso significa que</p><p>dentro do laço haverá uma volta para um desses vértices. Na primeira</p><p>volta, w = v2 e, como não está marcado, o processo entra no condicional</p><p>da linha 4. A aresta (v1, v2) é visitada e o procedimento Busca é invoca-</p><p>do, de maneira recursiva como Busca (v2, v1). O grafo estará como</p><p>na Figura 2, em que o vértice marcado é representado com fundo mais</p><p>claro, a aresta de árvore visitada em tracejado e a aresta de retorno</p><p>visitada com pontilhado.</p><p>Na chamada recursiva com Busca (v2, v1), o vértice analisado</p><p>é o v2, portanto, ele é marcado e seus vértices adjacentes são retor-</p><p>nados: {v1, v3, v4}. O laço da linha 3 será executado para cada um</p><p>desses vértices. Iniciando com v1, o condicional da linha 4 falha (pois</p><p>já está marcado) e o da linha 8 também (pois v1 é o pai de v2, ou seja,</p><p>foi passado como segundo parâmetro na chamada do procedimen-</p><p>to Busca). Desse modo, o laço retorna para obter o segundo vértice</p><p>adjacente a v2, que é v3.</p><p>Figura 1</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Figura 2</p><p>Grafo G – Busca em v1</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Caminho mínimo e árvores geradoras 55</p><p>Como v3 não está marcado, o processo entra no condicional da</p><p>linha 4, visitando a aresta de árvore (v2, v3) e chamando o procedi-</p><p>mento recursivamente como Busca (v3, v2) (Figura 3).</p><p>Na chamada recursiva com Busca (v3, v2), o vértice a ser ana-</p><p>lisado é o v3, portanto, ele é marcado e seus vértices adjacentes são</p><p>retornados: {v2, v4}. O laço da linha 3 será executado para cada um</p><p>desses vértices. Iniciando com v2, o condicional da linha 4 falha (pois</p><p>já está marcado) e o da linha 8 também (pois v2 é o pai de v3, isto é,</p><p>foi passado como segundo parâmetro na chamada do procedimen-</p><p>to Busca). Desse modo, o laço retorna para obter o segundo vértice</p><p>adjacente a v3, que é v4.</p><p>Como v4 não está marcado, o processo entra no condicional da</p><p>linha 4, visitando a aresta de árvore (v3, v4) e chamando o procedi-</p><p>mento recursivamente como Busca (v4, v3) (Figura 4).</p><p>Na chamada recursiva com Busca (v4, v3), o vértice analisado</p><p>é o v4, portanto, ele é marcado e seus vértices adjacentes são retor-</p><p>nados: {v3, v2, v1, v5}. O laço da linha 3 será executado para cada um</p><p>desses vértices. Iniciando com v3, o condicional da linha 4 falha (pois</p><p>já está marcado) e o da linha 8 também (pois v3 é o pai de v4, isto é,</p><p>foi passado como segundo parâmetro na chamada do procedimento</p><p>Busca). Assim, o laço retorna para obter o segundo vértice adjacente</p><p>a v4, que é v2.</p><p>Como v2 já está marcado, o processo entra no senão da linha 7</p><p>(Algoritmo 2). Como v2 não é o pai de v4, o processo visita a aresta</p><p>de retorno (v4, v2). Os condicionais terminam e o processo vai para</p><p>a próxima volta do laço da linha 3 para tentar analisar o próximo</p><p>vértice adjacente a v5.</p><p>Como v1 já está marcado, o processo entra no senão da linha 7.</p><p>Como v1 não é o pai de v4, o processo visita a aresta de retorno (v4, v1).</p><p>Os condicionais terminam e o processo vai para a próxima volta do</p><p>laço da linha 3, analisando o próximo vértice adjacente a v4, que é v5.</p><p>Como v5 não está marcado, o processo entra no condicional da</p><p>linha 4, visitando a aresta de árvore (v4, v5) e chamando o procedi-</p><p>mento recursivamente como Busca (v5, v4) (Figura 5).</p><p>Na chamada recursiva com Busca (v5, v4), o vértice analisado</p><p>é o v5, portanto, ele é marcado e seus vértices adjacentes são retor-</p><p>nados: {v4, v1}. O laço da linha 3 será executado</p><p>para cada um desses</p><p>vértices. Iniciando com v4, o condicional da linha 4 falha (pois já está</p><p>marcado) e o da linha 8 também (pois v4 é o pai de v5). Assim, o laço</p><p>retorna para obter o segundo vértice adjacente a v5, que é v1.</p><p>Como v1 já está marcado, o processo entra no senão da linha 7.</p><p>Como v1 não é o pai de v5, o processo visita a aresta de retorno (v5, v1).</p><p>Os condicionais terminam e o processo vai para a próxima volta do</p><p>laço da linha 3, analisando o próximo vértice adjacente a v4, que é v1.</p><p>Figura 3</p><p>Grafo G – Busca em v2</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Figura 4</p><p>Grafo G – Busca em v3</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Figura 5</p><p>Grafo G – Busca em v4</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>56 Teoria dos Grafos</p><p>Como não há mais vértices adjacentes a v5, o laço da linha 3 termina e a chama-</p><p>da recursiva também, retornando à última invocação de Busca (linha 6). Quando o</p><p>procedimento analisa o vértice v4, o grafo fica como na Figura 6.</p><p>No retorno da última chamada recursiva, o procedimento estava</p><p>analisando o vértice v4, cujos vértices adjacentes eram {v3, v2, v1 e v5}</p><p>e já haviam sido analisados todos. Portanto, o laço da linha 3 termi-</p><p>na e essa chamada recursiva termina, retornando à última invoca-</p><p>ção de Busca (linha 6).</p><p>No retorno da última chamada recursiva, o procedimen-</p><p>to estava analisando o vértice v3 cujos vértices adjacentes eram</p><p>{v2, v4} e já haviam sido todos analisados. Portanto, o laço da linha</p><p>3 termina e a chamada recursiva também, retornando à última in-</p><p>vocação de Busca (linha 6), quando o procedimento estava anali-</p><p>sando o vértice v2.</p><p>No retorno da última chamada recursiva, o procedimento estava</p><p>analisando o vértice v2 cujos vértices adjacentes eram {v1, v3, v4} e já</p><p>haviam sido analisados os vértices v1 e v3. Portanto, o próximo vérti-</p><p>ce a ser analisado é o v4.</p><p>Como v4 já está marcado, o processo entra no senão da linha 7. Não sendo v4</p><p>pai de v2, o processo visita novamente a aresta de retorno (v2, v4). Os condicionais</p><p>terminam e o processo vai para a próxima volta do laço da linha 3.</p><p>Já que não há mais vértices adjacentes a v2, o laço da linha 3 termina e a chama-</p><p>da recursiva também, retornando à última invocação de Busca (linha 6), quando o</p><p>procedimento estava analisando o vértice v1.</p><p>No retorno da última chamada recursiva, o procedimento estava analisando o</p><p>vértice v1 cujos vértices adjacentes eram {v2, v4, v5} e já havia sido analisado o vértice</p><p>v2. Portanto, o próximo vértice a ser verificado seria o v4.</p><p>Como v4 já está marcado, o processo entra no senão da linha 7. Como v4 não é</p><p>o pai de v1, o processo visita novamente a aresta de retorno (v1, v4). Os condicionais</p><p>terminam e o processo vai para a próxima volta do laço da linha 3. O próximo vér-</p><p>tice a ser analisado na lista de adjacentes é o v5.</p><p>Uma vez que v5 já está marcado, o processo entra no senão da</p><p>linha 7. Como v5 não é o pai de v1, o processo visita novamente a</p><p>aresta de retorno (v1, v5). Os condicionais terminam e o processo vai</p><p>para a próxima volta do laço da linha 3.</p><p>Já que não há mais vértices adjacentes a v1, o laço da linha 3 ter-</p><p>mina e a chamada do procedimento Busca também, finalizando o</p><p>processo de busca em profundidade.</p><p>Como resultado, a Figura 7 apresenta a árvore de busca em pro-</p><p>fundidade resultante da aplicação do algoritmo que contém o vérti-</p><p>ce v1 como raiz. Na composição foram usados somente os vértices</p><p>visitados na linha 5 do algoritmo, que são os vértices de árvore.</p><p>Figura 6</p><p>Grafo G – Busca em v5</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Figura 7</p><p>Árvore de busca em profundidade de G</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Caminho mínimo e árvores geradoras 57</p><p>Um subgrafo de G é dito subgrafo gerador se possui todos os vértices de G. Se</p><p>esse subgrafo for uma árvore, ele é denominado árvore geradora.</p><p>As arestas de árvore encontradas pela aplicação do Algoritmo 2, que podem ser</p><p>vistas na Figura 7, foram: A’ = {(v1, v2), (v2, v3), (v3, v4), (v4, v5)}. Assim, o grafo T = (V, A’),</p><p>resultante do processo de busca em profundidade, é uma árvore geradora do grafo</p><p>G = (V, A).</p><p>Outro tipo de busca que pode ser efetuado é a busca em largura pelo gra-</p><p>fo. Ela é feita quando se escolhe o vértice incidente menos recentemente alcança-</p><p>do na busca. Para isso, assim que se obtém a lista de vértices adjacentes, deve-se</p><p>enfileirá-los em uma estrutura de dados Fila. Toda vez que se escolhe um vértice,</p><p>deve-se obtê-lo retirando-o da fila; toda vez que um vértice é marcado, deve-se en-</p><p>fileirá-lo. O Algoritmo 3 apresenta o pseudocódigo da busca em largura.</p><p>Algoritmo 3</p><p>Busca em largura</p><p>Dados: Grafo conexo G = (V, A)</p><p>1 PROCEDIMENTO Busca Largura(s)</p><p>2 Q <- Fila Vazia</p><p>3 Marcar s</p><p>4 Inserir s em Q</p><p>5 ENQUANTO Q ≠ ∅ FAÇA</p><p>6 v <- Primeiro Elemento de Q</p><p>7 PARA w ∈ Adj(v) FAÇA</p><p>8 SE w não está marcado ENTÃO</p><p>9 Visitar aresta de árvore (v, w)</p><p>10 Marcar w</p><p>11 Inserir w em Q</p><p>12 SENÃO</p><p>13 SE w está em Q ENTÃO</p><p>14 Visitar aresta de retorno (v, w)</p><p>15 FIM SE</p><p>16 FIM SE</p><p>17 FIM PARA</p><p>18 Retirar v de Q</p><p>19 FIM ENQUANTO</p><p>20 FIM PROCEDIMENTO</p><p>21</p><p>22 Desmarcar todos os vértices de G</p><p>23 Escolher um vértice s</p><p>24 BuscaLargura(s)</p><p>Fonte: Adaptado de Szwarcfiter, 2018.</p><p>Se forem consideradas somente as arestas de árvore (linha 9 do Algoritmo 3)</p><p>para a construção de um outro grafo (nesse caso, um subgrafo), o resultado cla-</p><p>ramente não teria ciclos, pois nesse trecho o algoritmo nunca visita uma aresta</p><p>adjacente a um vértice já marcado. Assim, diz-se que o algoritmo constrói uma</p><p>árvore de busca em largura. O vértice escolhido como sendo o primeiro a ser</p><p>visitado também é chamado de raiz da árvore de busca em largura.</p><p>Fila é uma estrutura de dados</p><p>baseada em uma lista linear em</p><p>que todas as operações são feitas</p><p>nas suas extremidades. O início da</p><p>fila é chamado de frente e o final</p><p>de trás. O modelo intuitivo de uma</p><p>fila é o mesmo usado em filas de</p><p>bancos, aeroportos, mercados etc.</p><p>Uma pessoa que chega na fila</p><p>entra na extremidade de trás, e a</p><p>próxima que sai, para ser servida, é</p><p>a que está no início (frente).</p><p>Assim, esse padrão é seguido na</p><p>estrutura de dados Fila, isto é,</p><p>quando se insere um elemento</p><p>na fila, este sempre é inserido</p><p>na extremidade de trás; quando</p><p>um elemento é retirado, sempre</p><p>é removido da extremidade da</p><p>frente. Como não há remoção ou</p><p>inserção de elementos em outras</p><p>posições da fila, duas operações</p><p>de manipulação são permitidas:</p><p>inserir ou enfileirar e remover ou</p><p>desenfileirar.</p><p>Saiba mais</p><p>58 Teoria dos Grafos</p><p>Para ilustrar e execução do Algoritmo 3, considere novamente o grafo da</p><p>Figura 1. O algoritmo começa desmarcando todos os vértices e escolhe qualquer</p><p>um destes para ser a raiz da busca. Aqui, será escolhido o vértice v1, mas poderia</p><p>ser qualquer um, pois não há indicação no algoritmo. Ao ser chamado pela primeira</p><p>vez, o procedimento é denominado como BuscaLargura(v1). Para essa execução</p><p>será usada uma Fila denotada por Q e composta por uma coleção de elementos,</p><p>no caso, de vértices.</p><p>O que caracteriza uma fila é o local de inserção e remoção dos elementos.</p><p>Pode-se fazer uma analogia, por exemplo, com uma fila de banco: sempre que você</p><p>chega nela, precisa ficar no final; a pessoa a ser atendida sempre é a que está no</p><p>início. Desse modo, sempre que um elemento é inserido na fila isso é feito na parte</p><p>de trás, enquanto que a remoção do elemento é feita na parte da frente. A Figura 8</p><p>mostra uma fila com alguns elementos já inseridos.</p><p>Figura 8</p><p>Fila Q</p><p>d a f b d</p><p>Frente Trás</p><p>Fonte: Elaborada pelo autor.</p><p>Ao incorporar o elemento c na Fila Q, ele é colocado na parte de trás, logo após</p><p>o elemento d. Com a inserção, a fila fica como mostrado na Figura 9.</p><p>Figura 9</p><p>Fila Q com a inserção do elemento c</p><p>d a f b d c</p><p>Frente Trás</p><p>Fonte: Elaborada pelo autor.</p><p>Caso haja uma remoção na Fila Q, o elemento a ser extraído é sempre o que se</p><p>encontra na frente da fila, que, no caso, é o elemento d. Havendo a retirada, a fila</p><p>fica</p><p>como mostrado na Figura 10.</p><p>Figura 10</p><p>Fila Q com a remoção de um elemento</p><p>a f b d c</p><p>Frente Trás</p><p>Fonte: Elaborada pelo autor.</p><p>O procedimento BuscaLargura inicia e a fila Q é criada e tornada vazia,</p><p>marcando-se o vértice inicial v1 e inserindo-o na fila (Figura 11).</p><p>Figura 11</p><p>Busca em largura - Vértice v1</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>V1</p><p>Frente Trás</p><p>Fila Q</p><p>Caminho mínimo e árvores geradoras 59</p><p>O laço da linha 5 serve para que o procedimento só termine depois que não haja</p><p>elementos para serem processados na fila. Ao longo da execução do laço, novos</p><p>vértices são inseridos e removidos.</p><p>Na primeira volta do laço, a variável v recebe o primeiro elemento da fila, no caso,</p><p>v1. O laço da linha 7 varre todos os elementos adjacentes a v1, a saber, {v2, v4 e v5},</p><p>e, para cada volta do laço, um desses é analisado.</p><p>Inicia-se com v2, como não está marcado, e visita a aresta de árvore (v1, v2).</p><p>Marca-se v2 e insere-se v2 em Q. O resultado pode ser visto na Figura 12.</p><p>Figura 12</p><p>Busca em largura – Vértice v2</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>V1 V2</p><p>Frente Trás</p><p>Fila Q</p><p>O mesmo processo dentro desse laço é feito para v4 e v5. Como nenhum desses</p><p>está marcado, o procedimento sempre entra no condicional da linha 8. O resultado</p><p>é apresentado na Figura 13.</p><p>Figura 13</p><p>Busca em largura – Vértices v4 e v5</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>V1 V2 V4 V5</p><p>Frente Trás</p><p>Fila Q</p><p>Ao término do laço da linha 7, a linha 18 é executada retirando-se da fila o vértice</p><p>v, que, nesse caso, vale v1, sobrando para serem processados os vértices v2, v4 e v5.</p><p>Ao retornar à linha 5, o processo verifica que a fila não está vazia. Na linha 6,</p><p>obtém-se o primeiro elemento da fila, no caso, v2. O laço da linha 7 varre todos os</p><p>elementos adjacentes a v2, no caso {v1, v4, v3}, e, para cada volta do laço, um desses</p><p>vértices é analisado.</p><p>Inicia-se com v1, como está marcado, e executa-se o caso contrário na linha 12.</p><p>O condicional da linha 13 verifica se v1 está na fila; como não está, o condicional</p><p>termina, retornando ao próximo vértice adjacente a v2.</p><p>O próximo vértice a ser analisado pelo laço da linha 7 é v4. Como já está mar-</p><p>cado, executa o caso da linha 12 e, no condicional da linha 13, encontra v4 ainda</p><p>60 Teoria dos Grafos</p><p>na fila. Assim, visita-se a aresta de retorno (v2, v4) e termina-se essa volta do laço</p><p>retornando ao próximo vértice adjacente a v2.</p><p>Em seguida, analisa-se v3. Como não está marcado, entra no condicional da li-</p><p>nha 8, visitando a aresta (v2, v3), marcando o vértice v3 e inserindo v3 na fila. Em</p><p>seguida, finaliza o condicional e retorna ao laço da linha 7. Como v2 não tem mais</p><p>vértices adjacentes, termina-se esse laço e executa-se a linha 18, retirando v2 da fila.</p><p>O resultado pode ser visto na Figura 14.</p><p>Figura 14</p><p>Busca em largura – Término do processamento de v2</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>V4 V5 V3</p><p>Frente Trás</p><p>Fila Q</p><p>O laço da linha 5 reinicia. Na linha 6, o vértice v4 é atribuído a v e, na linha 7,</p><p>inicia-se o laço sobre todos os elementos adjacentes a v4, a saber, {v3, v2, v1, v5}.</p><p>Analisando o vértice v3, percebe-se que ele já está marcado, então, entra no caso</p><p>contrário da linha 12. Como v3 está na fila, executa a linha 14, que visita a aresta de</p><p>retorno (v4, v3). Ao final, retorna à próxima volta do laço da linha 7.</p><p>Analisando o vértice v2, percebe-se que ele já está marcado, então, entra no caso</p><p>contrário da linha 12. Como v2 não está na fila, termina o condicional sem visitar a ares-</p><p>ta (pois ela já foi visitada). Ao final, retorna à próxima volta do laço da linha 7.</p><p>Também o vértice v1 já está marcado, assim, entra no caso contrário da linha 12.</p><p>Como v1 não está na fila, termina o condicional sem visitar a aresta (pois ela já foi visi-</p><p>tada). Ao final, retorna à próxima volta do laço da linha 7.</p><p>Já o vértice v5, que também está marcado, entra no caso contrário da linha</p><p>12. Como v5 está na fila, executa a linha 14, que visita a aresta de retorno (v4, v5).</p><p>Ao final, retorna à próxima volta do laço da linha 7. Terminando o laço da linha 7,</p><p>pois os vértices adjacentes de v4 acabaram, a execução do procedimento sai do laço</p><p>e executa a linha 18, removendo v4 da fila. O resultado pode ser visto na Figura 15.</p><p>Figura 15</p><p>Busca em largura – Término do processamento de v4</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>V5 V3</p><p>Frente Trás</p><p>Fila Q</p><p>Caminho mínimo e árvores geradoras 61</p><p>O laço da linha 5 reinicia. Na linha 6, o vértice v5 é atribuído a v e, na linha 7,</p><p>inicia-se o laço sobre todos os elementos adjacentes a v5, a saber, {v4, v1}.</p><p>Analisando o vértice v4, percebe-se que ele já está marcado, então, entra no caso</p><p>contrário da linha 12. Como v4 não está na fila, termina o condicional sem visitar a</p><p>aresta (pois ela já foi visitada). Ao final, retorna à próxima volta do laço da linha 7.</p><p>O vértice v1 também está marcado, assim, entra no caso contrário da linha 12.</p><p>Como v1 não está na fila, termina o condicional sem visitar a aresta (pois ela já foi</p><p>visitada). Ao final, retorna à próxima volta do laço da linha 7.</p><p>Terminando o laço da linha 7, pois os vértices adjacentes de v5 acabaram, sai do</p><p>laço e executa a linha 18, removendo v5 da fila. O resultado pode ser visto na Figura 16.</p><p>Figura 16</p><p>Busca em largura – Término do processamento de v5</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>V3</p><p>Frente Trás</p><p>Fila Q</p><p>O laço da linha 5 reinicia. Na linha 6, o vértice v3 é atribuído a v e, na linha 7,</p><p>inicia-se o laço sobre todos os elementos adjacentes a v3, a saber, {v4, v2}.</p><p>Analisando o vértice v4,, percebe-se que ele já está marcado, então, entra no caso</p><p>contrário da linha 12. Como v4 não está na fila, termina o condicional sem visitar a</p><p>aresta (pois ela já foi visitada). Ao final, retorna à próxima volta do laço da linha 7.</p><p>O vértice v2 também está marcado, assim, entra no caso contrário da linha 12.</p><p>Como v2 não está na fila, termina o condicional sem visitar a aresta (pois ela já foi</p><p>visitada). Ao final, retorna à próxima volta do laço da linha 7.</p><p>Terminando o laço da linha 7, pois os vértices adjacentes a v3 acabaram, sai</p><p>do laço e executa a linha 18, removendo v3 da fila. O resultado pode ser visto na</p><p>Figura 17.</p><p>Figura 17</p><p>Busca em largura – Término do processamento de v3</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>Frente Trás</p><p>Fila Q</p><p>62 Teoria dos Grafos</p><p>Já que a fila está vazia, o laço da linha 5 termina e a busca em largura é finaliza-</p><p>da. Como resultado, a Figura 18 apresenta a árvore de busca em largura resultante</p><p>da aplicação do algoritmo, que contém o vértice v1 como raiz. Para a composição,</p><p>são usadas somente as arestas visitadas na linha 9 do algoritmo, que são as arestas</p><p>de árvore.</p><p>As arestas de árvore encontradas foram: A’ = {(v1, v2), (v1, v4), (v1, v5),</p><p>(v2, v3)}. Assim, o grafo T = (V, A’), resultante do processo de busca em</p><p>largura, também é uma árvore geradora do grafo G = (V, A).</p><p>Os procedimentos de busca apresentados foram aplicados</p><p>a grafos não orientados e conexos. Percebe-se que todo grafo</p><p>não orientado conexo tem, pelo menos, uma árvore geradora.</p><p>Nos exemplos mostrados são conseguidas duas árvores gerado-</p><p>ras, mas, trocando a ordem de escolha dos vértices, facilmente</p><p>chega-se a outras árvores.</p><p>Por suas características, uma árvore com n vértices possui exata-</p><p>mente n-1 arestas, portanto, a árvore geradora de um grafo conexo</p><p>não orientado com n vértices tem exatamente n-1 arestas.</p><p>Figura 18</p><p>Árvore de busca em largura</p><p>Fonte: Elaborada pelo autor.</p><p>v5 v2</p><p>v4 v3</p><p>v1</p><p>3.2 Árvore Geradora Mínima</p><p>Vídeo Encontrar uma árvore geradora mínima é muito importante na teoria dos gra-</p><p>fos, pois vários problemas reais podem ser mapeados e solucionados por ela.</p><p>Por exemplo, para efetuar o projeto de uma rede de fibra ótica entre os nós,</p><p>desconsiderando redundâncias, é preciso que todos os nós estejam conectados, e</p><p>o objetivo é gastar o mínimo possível. Em um extremo, pode-se conectar todos os</p><p>n nós com todos os outros, criando um grafo completo</p><p>Kn. Se há um custo consi-</p><p>derável na ligação entre nós, este será em média multiplicado por n (n-1)</p><p>2</p><p>, que é o</p><p>número de arestas que um grafo completo Kn possui.</p><p>Assim, dado um grafo conexo, um conjunto de arestas que o mantém – todos os</p><p>vértices são alcançáveis – é uma árvore geradora. Se houver um custo associado, o</p><p>objetivo é conseguir uma árvore geradora mínima.</p><p>Supondo que há a necessidade de asfaltar estradas entre cidades, com um dado</p><p>conjunto de municípios e vias, o objetivo é asfaltar determinado subconjunto para</p><p>que todas as cidades sejam interligadas por vias asfaltadas e que o custo seja míni-</p><p>mo (BARROSO, 2014). Nesse caso, vários fatores devem ser analisados e considera-</p><p>dos para o custo de pavimentação de vias, como aspectos geológicos, de traçado,</p><p>hidrológicos etc. Assim, para a modelagem do problema, assume-se que essas in-</p><p>formações já foram obtidas e que, para a análise matemática, tem-se um grafo no</p><p>qual os vértices são as cidades, as arestas são as estradas que as conectam e cada</p><p>aresta é ponderada com o custo de pavimentação.</p><p>Analisando esse grafo, conectar todas as cidades com estradas pavimentadas a</p><p>um custo mínimo significa encontrar um conjunto de estradas a serem asfaltadas</p><p>de tal forma que todas as cidades sejam alcançadas sem grandes valores, isto é,</p><p>não havendo redundância (ciclos). Esse conjunto de arestas, juntamente com seus</p><p>Uma formulação detalhada</p><p>desse problema e das</p><p>técnicas de resolução,</p><p>como a aplicação de</p><p>Árvores Geradoras</p><p>Mínimas e Árvore de</p><p>Steiner, pode ser vista no</p><p>artigo Aplicação de grafos</p><p>em um problema de rede.</p><p>BARROSO, M. M. de A. Abakós, v.</p><p>2, n. 2, p. 48-78, 30 maio 2014.</p><p>Disponível em: http://periodicos.</p><p>pucminas.br/index.php/abakos/arti-</p><p>cle/view/P.2316-9451.2014v2n2p48.</p><p>Acesso em: 29 maio 2020.</p><p>Leitura</p><p>Caminho mínimo e árvores geradoras 63</p><p>vértices incidentes, será uma árvore (pois não possui ciclos) geradora, já que conta</p><p>com todos os vértices do grafo original e é mínima, uma vez que o objetivo é encon-</p><p>trar o custo mínimo de pavimentação.</p><p>Assim, um dos problemas clássicos em grafos é encontrar uma árvore geradora</p><p>mínima em um grafo não dirigido com custos (ou pesos) nas arestas. Para isso,</p><p>faz-se necessário definir alguns conceitos.</p><p>Dado um grafo G não dirigido com custos, o custo de cada aresta</p><p>pode ser positivo ou negativo e o custo de um subgrafo ou uma</p><p>árvore de G é a soma dos custos de cada aresta.</p><p>Uma árvore geradora mínima de um grafo G, também conhecida</p><p>como minimum spanning tree (MST), é uma árvore geradora de G com</p><p>custo mínimo. Em outras palavras, é uma árvore geradora com custo</p><p>menor dentre todas as possíveis árvores geradoras de G.</p><p>Convém ressaltar que, se todas as arestas tiverem o mesmo custo,</p><p>então, qualquer árvore geradora é mínima, pois conta com o mesmo</p><p>número de arestas, os mesmos custos em cada aresta e, portanto, o</p><p>mesmo custo total.</p><p>Observe o grafo da Figura 19. Claramente, ele conta com várias</p><p>árvores geradores.</p><p>Partindo de v1 como vértice raiz, a Figura 20 apresenta duas</p><p>dessas árvores.</p><p>Figura 20</p><p>Árvores geradoras</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v3</p><p>v1</p><p>2</p><p>6</p><p>10</p><p>v2 v4</p><p>v3</p><p>v1</p><p>2</p><p>5</p><p>1</p><p>Ao calcular o custo da árvore geradora da esquerda, somando os custos das</p><p>arestas, o valor total é 18. Já o valor total da árvore da direita é 8.</p><p>De acordo com Kruskal (1956) e Prim (1957), dois algoritmos são apresentados</p><p>para encontrar a MST de um grafo: o algoritmo de Kruskal (concebido em 1956) e</p><p>o algoritmo de Prim (concebido em 1957). Ambos são aplicados a grafos conexos</p><p>ponderados, nos quais os pesos não são negativos.</p><p>Figura 19</p><p>Grafo ponderado</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v3</p><p>v1</p><p>2</p><p>6</p><p>1</p><p>10</p><p>5</p><p>64 Teoria dos Grafos</p><p>Os algoritmos que encontram uma MST são de busca gulosa, isto é, a cada passo</p><p>selecionam a melhor aresta possível para compor a árvore. O Algoritmo 4 apresen-</p><p>ta o algoritmo de Prim para encontrar uma árvore geradora mínima (PRIM, 1957).</p><p>Algoritmo 4</p><p>Árvore Geradora Mínima – Algoritmo de Prim</p><p>Dados: Grafo conexo ponderado G = (V, A)</p><p>1 v <- Um vértice qualquer do grafo</p><p>2 T <- {v}</p><p>3 Tmin <- ∅</p><p>4 V’ <- V \ {v}</p><p>5 ENQUANTO V’ ≠ ∅ FAÇA</p><p>6 Encontrar aresta (t, v’) ∈ A tal que t ∈ T e v’ ∈ V’, sendo o custo de (t,v’) o menor valor</p><p>7 T <- T ∪ {v’}</p><p>8 V’ <- V’ \ {v’}</p><p>9 Tmin <- Tmin ∪ (t, v’)</p><p>10 FIM ENQUANTO</p><p>Fonte: Adaptado de Goldbarg; Goldbarg, 2012.</p><p>O algoritmo de Prim é simples e inicia escolhendo-se um vértice para ser a raiz</p><p>da árvore. Logo após, ele mantém três estruturas auxiliares: V’, T e Tmin.</p><p>O conjunto V’ mantém os vértices que ainda não foram escolhidos pelo algoritmo.</p><p>Inicialmente, ele recebe o mesmo conjunto V (vértices do grafo) subtraído do vérti-</p><p>ce escolhido como raiz da árvore. O conjunto V’ faz com que o algoritmo não esco-</p><p>lha uma aresta a um vértice já usado na árvore, evitando ciclos. O conjunto T, que</p><p>inicia com o vértice raiz, a cada volta do laço é adicionado ao vértice cuja aresta foi</p><p>recentemente escolhida. O conjunto Tmin inicia vazio e, ao final do algoritmo, terá</p><p>todas as arestas que fazem parte da árvore geradora mínima.</p><p>O algoritmo possui um laço que é repetido enquanto o conjunto V’ não é</p><p>vazio, isto é, enquanto ainda existem vértices para serem adicionados à árvore.</p><p>Dentro do laço, o algoritmo escolhe a aresta que dá o menor valor entre um vér-</p><p>tice já escolhido na árvore (conjunto T) e entre um vértice ainda não escolhido</p><p>(conjunto V’).</p><p>Logo após, atualizam-se os conjuntos auxiliares. A T é adicionado o vértice</p><p>que foi escolhido; de V’ é subtraído o mesmo vértice escolhido, para que não</p><p>se repita na árvore; e em Tmin é acrescentada a aresta de menor custo. Ao final</p><p>do algoritmo, o conjunto Tmin contém todas as arestas participantes da árvore</p><p>geradora mínima.</p><p>O algoritmo de Kruskal constrói a árvore geradora mínima de uma forma um</p><p>pouco diferente. Enquanto o algoritmo de Prim inclui vértices para a geração da</p><p>árvore, Kruskal está voltado para inclusão de arestas (KRUSKAL, 1956). Confira um</p><p>exemplo no Algoritmo 5.</p><p>Apesar de simples, o algoritmo</p><p>de Prim apresentado é ineficiente.</p><p>Sua eficácia depende do processo</p><p>de escolha da aresta pertencente</p><p>à árvore e à estrutura de dados</p><p>utilizada. Para a implementação</p><p>simples aqui representada, usando</p><p>uma matriz de adjacências, a</p><p>complexidade é O (|A|*|V|).</p><p>Com uma implementação usando</p><p>uma heap binária, chega-se a</p><p>O(|A| log |V|), que é um ganho</p><p>significativo (JOHNSON, 1975).</p><p>Com o uso de outras estruturas</p><p>mais elaboradas, como uma</p><p>heap de Fibonacci, consegue-se</p><p>uma complexidade de O(|V|</p><p>log |V| + |A|), que é muito</p><p>boa para grafos esparsos</p><p>(FREDMAN; TARJAN, 1987).</p><p>Saiba mais</p><p>Caminho mínimo e árvores geradoras 65</p><p>Algoritmo 5</p><p>Árvore Geradora Mínima – Algoritmo de Kruskal</p><p>Dados: Grafo conexo ponderado G = (V, A)</p><p>1 Ordenar as arestas ai em ordem crescente sobre seu custo no vetor A’</p><p>2 A’ <- [ai], i = 1, 2, ..., |A|</p><p>3 Tmin <- A’[1]</p><p>4 PARA TODO ai ∈ A’, i = 2, 3, ..., |A| FAÇA</p><p>5 SE Tmin ∪ ai é um grafo acíclico ENTÃO</p><p>6 Tmin <- Tmin ∪ ai</p><p>7 FIM SE</p><p>8 FIM PARA</p><p>Fonte: Adaptado de Goldbarg; Goldbarg, 2012.</p><p>O algoritmo de Kruskal utiliza duas estruturas auxiliares: Tmin e A’. O conjunto</p><p>Tmin recebe as arestas que fazem parte da árvore sendo construída. Ao final do</p><p>algoritmo, Tmin contém a árvore geradora mínima. O vetor A’ mantém as arestas</p><p>ordenadas em ordem crescente por peso. Assim, o primeiro passo do algoritmo é</p><p>ordenar essas arestas para que o laço interno faça a varredura em ordem.</p><p>O algoritmo possui um laço (linha 4) que termina quando todas as arestas, de</p><p>maneira ordenada, forem analisadas. A cada volta do laço verifica-se uma aresta.</p><p>Se a inclusão dessa aresta mantém o grafo acíclico, desse modo, a aresta é adicio-</p><p>nada; caso contrário, é ignorada.</p><p>Assim que a árvore for construída, mesmo que mais arestas sejam analisadas, o</p><p>condicional da linha 5 não é satisfeito, pois a inclusão de mais arestas leva a ciclos,</p><p>o que garante que não serão inseridas mais arestas do que as necessárias para</p><p>a</p><p>árvore (no caso |V|–1 arestas).</p><p>Vê-se que os algoritmos de Prim e Kruskal, para encontrar uma árvore</p><p>geradora mínima, são simples, mas suas complexidades dependem de ou-</p><p>tras estruturas de dados. Descobrir os gargalos de um algoritmo não é tarefa fácil</p><p>e, muitas vezes, uma operação que inicialmente parece simples pode depreciar o</p><p>desempenho de um programa de maneira drástica.</p><p>O algoritmo de Kruskal também é</p><p>muito simples, mas sua complexi-</p><p>dade reside em ordenar as arestas</p><p>e verificar se a inclusão de uma</p><p>aresta gera um grafo acíclico.</p><p>A implementação mais eficiente</p><p>conhecida tem complexidade</p><p>O(|A| log |V|) e faz uso de</p><p>otimizações na representação e</p><p>verificação de conjuntos disjuntos.</p><p>A estrutura chamada UNION-FIND,</p><p>usando técnicas como union</p><p>by rank e path compression</p><p>(CP-ALGORITHMS, 2020), é capaz</p><p>de melhorar o desempenho do</p><p>algoritmo de Kruskal.</p><p>Saiba mais</p><p>3.3 Caminho Mínimo</p><p>Vídeo Percebe-se que os processos de busca em profundidade e largura apresentados</p><p>caminham por todos os vértices do grafo, mas claramente é possível alterá-los para</p><p>partir de um vértice v e chegar a outro vértice w. Assim, consegue-se encontrar uma</p><p>sequência de vértices que determina um caminho de v a w.</p><p>O custo de um caminho em grafos ponderados, isto é, com pesos nas arestas,</p><p>é dado pela soma dos pesos de todas as arestas que fazem parte do caminho. Em</p><p>um grafo não ponderado, define-se como caminho mínimo entre o vértice v1 e v2 o</p><p>caminho de menor tamanho, isto é, menor número de arestas entre v1 e v2.</p><p>Em razão da natureza do procedimento de busca em profundidade, não há</p><p>como garantir que o caminho encontrado é o caminho mínimo. Para isso, em gra-</p><p>fos não ponderados, deve-se efetuar uma busca em largura pelo grafo.</p><p>66 Teoria dos Grafos</p><p>Para grafos ponderados, o caminho mínimo entre o vértice v1 e v2 é o caminho</p><p>cuja soma dos pesos nas arestas possui o menor valor. Assim, em grafos pondera-</p><p>dos, o caminho mínimo pode não ser aquele que possui menor número de arestas.</p><p>O algoritmo de Dijkstra, publicado em 1959, rotula todos os vértices do grafo</p><p>por meio de um vértice origem, indicando qual o menor caminho entre esse vértice</p><p>e qualquer outro do grafo. Assim, ao final do algoritmo, consegue-se o caminho</p><p>mínimo entre o vértice origem e qualquer outro vértice, bastando caminhar pela</p><p>rotulação efetuada partindo do vértice destino.</p><p>Fonte: Adaptado de Goldbarg; Goldbarg, 2012.</p><p>Algoritmo 6</p><p>Caminho Mínimo em Grafo Ponderado – Algoritmo de Dijkstra</p><p>Dados: Grafo conexo ponderado G = (V, A), D = {dij}, em que dij é o peso da aresta entre o</p><p>vértice i e j, um vértice inicial da busca s</p><p>1 PARA v ∈ V FAÇA</p><p>2 rot[v] <- 0</p><p>3 dt[v] <- ∞</p><p>4 FIM PARA</p><p>5 dt[s] <- 0</p><p>6 V’ <- V</p><p>7 ENQUANTO V’ ≠ ∅ FAÇA</p><p>8 v <- elemento de V’, tal que dt [v] é o menor entre os elementos de V’</p><p>9 V’ <- V’ \ {v}</p><p>10 PARA u ∈ Adj(v) FAÇA</p><p>11 SE dt[v]+dvu < dt[u] ENTÃO</p><p>12 dt[u] <- dt[v]+ dvu</p><p>13 rot[u] <- v</p><p>14 FIM SE</p><p>15 FIM PARA</p><p>16 FIM ENQUANTO</p><p>O Algoritmo 6 apresenta o algoritmo de Dijkstra e tem como objetivo encontrar</p><p>o caminho mínimo entre um vértice e qualquer outro vértice do grafo. Seu funcio-</p><p>namento não é exato se houver pesos negativos nas arestas, portanto, usa-se so-</p><p>mente para quando todos os pesos são positivos.</p><p>Tendo como ponto de partida um vértice inicial s, esse algoritmo cria rótulos para</p><p>cada vértice do grafo, indicando sua distância a partir de v e qual vértice foi usado para</p><p>chegar até ele. Esses rótulos são mantidos por duas estruturas auxiliares, dt e rot, em</p><p>que dt mantém as distâncias a partir de v e rot mantém o vértice adjacente do caminho.</p><p>As linhas de 1 a 6 são usadas para inicializar os dados auxiliares e os rótulos.</p><p>Fora o rótulo do vértice inicial, o laço da linha 1 inicia todos os rótulos com zero e</p><p>todas as distâncias com ∞.</p><p>O laço da linha 7 é executado enquanto o conjunto auxiliar V’, que foi inicializado</p><p>com todos os vértices na linha 6, não for vazio. A cada volta do laço, um elemento</p><p>de V’ é escolhido, sendo o que possui a menor distância. Perceba que na primeira</p><p>volta será escolhido o vértice inicial cuja distância foi iniciada com zero, sendo os</p><p>demais iniciados com ∞.</p><p>Segundo Goldbarg e Goldbarg</p><p>(2012), para encontrar o caminho</p><p>mínimo em grafos pondera-</p><p>dos, quando há a presença de</p><p>pesos negativos, pode-se usar</p><p>o algoritmo de Bellman-Ford,</p><p>de 1956.</p><p>Agora, para encontrar o caminho</p><p>mínimo entre todos os pares de</p><p>vértices de um grafo, usa-se o</p><p>algoritmo de Floyd-Warshall, de</p><p>1959 (FLOYD, 1962).</p><p>Saiba mais</p><p>Caminho mínimo e árvores geradoras 67</p><p>Na linha 9, o vértice escolhido v é retirado de V’ e o laço da linha</p><p>10 varre todos os vértices adjacentes a v.</p><p>O condicional da linha 11 verifica se a distância do vértice escolhi-</p><p>do v, acrescida do peso da aresta (v, u), é menor que o valor da distân-</p><p>cia do vértice u. Se sim, significa que foi encontrado um caminho</p><p>melhor de s (vértice inicial) até u e que, portanto, o valor da distância</p><p>e seu rótulo devem ser atualizados (linhas 12 e 13). Perceba que se o</p><p>vértice u ainda não foi visitado, seu valor de distância está inicializado</p><p>com ∞, portanto, será sempre atualizado na primeira visita.</p><p>Para ilustrar a execução do algoritmo, considere o grafo pon-</p><p>derado da Figura 21. O algoritmo inicia definindo os rótulos para</p><p>cada vértice, que nas representações gráficas apresentadas serão</p><p>adicionados perto do vértice para melhor entendimento, como</p><p>mostra a Figura 22.</p><p>Em cada caixa perto do vértice, o primeiro compartimento indi-</p><p>ca o rótulo de vértice (rot) e o segundo a distância (dt). A Figura 22</p><p>apresenta as estruturas após a inicialização que ocorre nas linhas</p><p>de 1 a 5.</p><p>Na primeira volta do laço, V’ contém todos os vértices do grafo</p><p>(inicializado na linha 6), portanto, V’ = {v1, v2, v3, v4, v5}. O primeiro ele-</p><p>mento de V’ que possui a menor distância é v1.</p><p>O vértice v1 é removido de V’ na linha 9, portanto, V’ = {v2, v3, v4,</p><p>v5}. Na linha 10 busca-se e varre-se todos os vértices adjacentes a</p><p>v1, nesse caso, {v2, v3, v5}.</p><p>Para v2, verifica-se se dt[v1] (que é zero), acrescido do custo da</p><p>aresta (v1, v2) (que é 10), é menor que dt[v2] (que é infinito). Como é</p><p>menor, desse modo, a distância dt[v2] recebe 10 e o rótulo rt[v2] assu-</p><p>me o vértice v1. O laço, então, retorna para processar o próximo vér-</p><p>tice adjacente a v1. O grafo e as estruturas ficam como na Figura 23.</p><p>Figura 23</p><p>Processamento de (v1, v2)</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v5v3</p><p>v1</p><p>8</p><p>5</p><p>1</p><p>3</p><p>6</p><p>10</p><p>2</p><p>0 ∞</p><p>v1 10</p><p>0 0</p><p>0 ∞</p><p>0 ∞</p><p>Figura 22</p><p>Estruturas inicializadas</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v5v3</p><p>v1</p><p>8</p><p>5</p><p>1</p><p>3</p><p>6</p><p>10</p><p>2</p><p>0 ∞</p><p>0 ∞</p><p>0 0</p><p>0 ∞</p><p>0 ∞</p><p>68 Teoria dos Grafos</p><p>Para v3, verifica-se se dt[v1] (que é zero), acrescido do custo da</p><p>aresta (v1, v3) (que é 8), é menor que dt[v3] (que é infinito). Como é</p><p>menor, a distância dt[v3] recebe 8 e o rótulo rt[v3] assume o vérti-</p><p>ce v1. O laço, assim, retorna para processar o próximo vértice ad-</p><p>jacente a v1. O grafo e as estruturas ficam como na Figura 24.</p><p>Para v5, verifica-se se dt[v1] (que é zero), acrescido do custo da</p><p>aresta (v1, v5) (que é 3), é menor que dt[v5] (que é infinito). Como é</p><p>menor, a distância dt[v5] recebe 3 e o rótulo rt[v5] recebe o vértice</p><p>v1. O laço retorna para processar o próximo vértice adjacente a v1.</p><p>O grafo e as estruturas ficam como na Figura 25.</p><p>Como não há mais vértices adjacentes a v1, o laço das linhas</p><p>10 a 15 termina e o processo retorna ao laço da linha 7. Como o</p><p>conjunto V’ ainda não é vazio, mais uma volta desse laço será</p><p>executada.</p><p>Na linha 8 é escolhido o elemento de V’ = {v2, v3, v4, v5} que</p><p>possui a menor distância dt, nesse caso, v5. Na linha 9, o vértice v5</p><p>é removido de V’ e, portanto, V’ = {v2, v3, v4}. Já na linha 10 busca-se</p><p>e varre-se todos os vértices adjacentes a v5, nesse caso, {v1, v4}.</p><p>Para v1, verifica-se se dt[v5] (que é 3), acrescido do custo da</p><p>aresta (v5, v1) (que é 3), é menor que dt[v1] (que é zero). Como não</p><p>é menor, não faz qualquer atualização, e o grafo e as estruturas</p><p>são mantidos da mesma forma. O laço, assim, retorna para pro-</p><p>cessar o próximo vértice adjacente a v5.</p><p>Para v4, checa-se se dt[v5] (que é 3), acrescido do custo da</p><p>aresta (v5, v4) (que é 2), é menor que dt[v4] (que é infinito). Como</p><p>é menor, a distância dt[v4] recebe 5 e o rótulo rt[v4] assume o</p><p>vértice v5. O laço, então, retorna para processar o próximo vértice</p><p>adjacente a v5. O grafo e as estruturas ficam como na Figura 26.</p><p>Como não há mais vértices adjacentes a v5, o laço das linhas 10 a</p><p>15 termina e o processo retorna ao laço da linha 7. Como o conjunto</p><p>V’ ainda não é vazio, mais uma volta desse laço é executada.</p><p>Na linha 8 é escolhido o elemento de V’ = {v2, v3, v4} que possui</p><p>a menor distância dt, nesse caso, v4. Na linha 9, o vértice v4 é</p><p>removido de V’, portanto, V’ = {v2, v3}. Já na linha 10 busca-se e</p><p>varre-se todos os vértices adjacentes a v4, nesse caso, {v2, v3, v5}.</p><p>Para v2, verifica-se se dt[v4] (que é 5), acrescido do custo da</p><p>aresta (v4, v2) (que é 5), é menor que dt[v2] (que é 10). Como não</p><p>é menor, não faz qualquer atualização, e o grafo e as estruturas</p><p>são mantidos da mesma forma. O laço, então, retorna para pro-</p><p>cessar o próximo adjacente a v4.</p><p>Para v3, checa-se se dt[v4] (que é 5), acrescido do custo da</p><p>aresta (v4, v3) (que é 6), é menor que dt[v3] (que é 8). Como não</p><p>é menor, não faz qualquer atualização, e o grafo e as estruturas</p><p>Figura 24</p><p>Processamento</p><p>de (v1, v3)</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v5v3</p><p>v1</p><p>8</p><p>5</p><p>1</p><p>3</p><p>6</p><p>10</p><p>2</p><p>V1 8</p><p>V1 10</p><p>0 0</p><p>0 ∞</p><p>0 ∞</p><p>Figura 25</p><p>Processamento</p><p>de (v1, v5)</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v5v3</p><p>v1</p><p>8</p><p>5</p><p>1</p><p>3</p><p>6</p><p>10</p><p>2</p><p>V1 8</p><p>V1 10</p><p>0 0</p><p>V1 3</p><p>0 ∞</p><p>Figura 26</p><p>Processamento</p><p>de (v5, v4)</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v5v3</p><p>v1</p><p>8</p><p>5</p><p>1</p><p>3</p><p>6</p><p>10</p><p>2</p><p>V1 8</p><p>V1 10</p><p>0 0</p><p>V1 3</p><p>V5 5</p><p>Caminho mínimo e árvores geradoras 69</p><p>são mantidos da mesma forma. O laço, desse modo, retorna para processar o</p><p>próximo vértice adjacente a v4.</p><p>Para v5, verifica-se se dt[v4] (que é 5), acrescido do custo da aresta (v4, v5) (que é</p><p>2), é menor que dt[v5] (que é 3). Como não é menor, não faz qualquer atualização, e</p><p>o grafo e as estruturas são mantidos da mesma forma. O laço, então, retorna para</p><p>processar o próximo vértice adjacente a v4.</p><p>Como não há mais vértices adjacentes a v4, o laço das linhas 10 a 15 termina e</p><p>o processo retorna ao laço da linha 7. Como o conjunto V’ ainda não é vazio, mais</p><p>uma volta desse laço é executada.</p><p>Na linha 8 é escolhido o elemento de V’ = {v2, v3} que possui a menor distância dt,</p><p>nesse caso, v3. Na linha 9, o vértice v3 é removido de V’, portanto, V’ = {v2}. A linha 10</p><p>busca e varre todos os vértices adjacentes a v3, nesse caso, {v1, v2, v4}.</p><p>Para v1, verifica-se se dt[v3] (que é 8), acrescido do custo da aresta (v3, v1) (que é</p><p>8), é menor que dt[v1] (que é 0). Como não é menor, não se faz qualquer atualiza-</p><p>ção, e o grafo e as estruturas são mantidos da mesma forma. O laço, assim, retorna</p><p>para processar o próximo vértice adjacente a v3.</p><p>Para v2, checa-se se dt[v3] (que é 8), acrescido do custo da aresta (v3, v2) (que é 1),</p><p>é menor que dt[v2] (que é 10). Como é menor, a distância dt[v2] recebe 9 e o rótulo</p><p>rt[v2] assume o vértice v3. O laço, desse modo, retorna para processar o próximo</p><p>vértice adjacente a v3. O grafo e as estruturas ficam como na Figura 27.</p><p>Para v4, verifica-se se dt[v3] (que é 8), acrescido do custo da</p><p>aresta (v3, v4) (que é 6), é menor que dt[v4] (que é 5). Como não</p><p>é menor, não faz qualquer atualização, e o grafo e as estruturas</p><p>são mantidos da mesma forma. O laço, então, retorna para pro-</p><p>cessar o próximo vértice adjacente a v3.</p><p>Como não há mais vértices adjacentes a v3, o laço das linhas 10</p><p>a 15 termina e o processo retorna ao laço da linha 7. Como o con-</p><p>junto V’ ainda não é vazio, mais uma volta desse laço é executada.</p><p>Na linha 8, é escolhido o elemento de V’ = {v2} que possui a</p><p>menor distância dt, nesse caso, v2, que é removido de V’, na linha</p><p>9, portanto, V’ = Ø. Na linha 10 busca-se e varre-se todos os vérti-</p><p>ces adjacentes a v2, nesse caso, {v1, v3, v4}.</p><p>Para v1, checa-se se dt[v2] (que é 9), acrescido do custo da ares-</p><p>ta (v2, v1) (que é 10), é menor que dt[v1] (que é 0). Como não é</p><p>menor, não é feita qualquer atualização, e o grafo e as estruturas</p><p>são mantidos da mesma forma. O laço retorna para processar o</p><p>próximo vértice adjacente a v2.</p><p>Para v3, verifica-se se dt[v2] (que é 9), acrescido do custo da aresta (v2, v3) (que é</p><p>1), é menor que dt[v3] (que é 8). Como não é menor, não é feita qualquer atualiza-</p><p>ção, e o grafo e as estruturas são mantidos da mesma forma. O laço retorna para</p><p>processar o próximo vértice adjacente a v2.</p><p>Para v4, checa-se se dt[v2] (que é 9), acrescido do custo da aresta (v2, v4) (que é</p><p>5), é menor que dt[v4] (que é 5). Como não é menor, não é feita qualquer atualiza-</p><p>Figura 27</p><p>Processamento de (v3, v2)</p><p>Fonte: Elaborada pelo autor.</p><p>v2 v4</p><p>v5v3</p><p>v1</p><p>8</p><p>5</p><p>1</p><p>3</p><p>6</p><p>10</p><p>2</p><p>V1 8</p><p>V3 9</p><p>0 0</p><p>V1 3</p><p>V5 5</p><p>70 Teoria dos Grafos</p><p>ção, e o grafo e as estruturas são mantidos da mesma forma. O laço retorna para</p><p>processar o próximo vértice adjacente a v2.</p><p>Como não há mais vértices adjacentes a v2, o laço das linhas 10 a 15 termina e o</p><p>processo retorna ao laço da linha 7. Como o conjunto V’ é vazio, o procedimento e</p><p>as estruturas de rótulos e distâncias ficam como na Figura 27.</p><p>Percebe-se que as distâncias mínimas entre v1 e cada um dos vértices são dadas</p><p>de maneira direta pela estrutura dt. Já o caminho mínimo precisa ser calculado</p><p>caminhando-se entre os rótulos, iniciando do vértice destino.</p><p>Por exemplo, para calcular o caminho mínimo entre v1 e v4, verifica-se o rótulo</p><p>rot[v4], que possui v5. Isso indica que o caminho partindo de v1 passa por v5 para</p><p>chegar em v4, isto é, a aresta (v5, v4) faz parte do caminho.</p><p>Analisando v5, percebe-se que seu rótulo rot[v5] possui v1. Significa que o cami-</p><p>nho passa por v1, isto é, a aresta (v1, v5) faz parte do caminho. Como se chegou em</p><p>v1 (vértice origem), não há mais o que calcular, portanto, o caminho entre v1 e v4 é</p><p>dado por: {(v1, v5), (v5, v4)}.</p><p>Efetuando-se todos os cálculos, as distâncias mínimas entre v1 e os demais vér-</p><p>tices do grafo, bem como os caminhos mínimos, são:</p><p>• De v1 para v2 : distância 9, caminho {(v1, v3), (v3, v2)}</p><p>• De v1 para v3 : distância 8, caminho {(v1, v3)}</p><p>• De v1 para v4 : distância 5, caminho {(v1, v5), (v5, v4)}</p><p>• De v1 para v5 : distância 3, caminho {(v1, v5)}</p><p>Assim, percebe-se que o algoritmo de Dijkstra varre o grafo todo desde de um</p><p>vértice inicial e dá como resultado a distância e o caminho entre o vértice inicial es-</p><p>colhido e cada um dos vértices do grafo. Para encontrar o caminho entre um vértice</p><p>qualquer e o vértice inicial, basta caminhar pelos rótulos em sequência.</p><p>Para digrafos (grafos direcionados), o algoritmo é o mesmo, bastando respeitar as</p><p>orientações das arestas ao retornar a lista de vértices adjacentes, linha 10 do Algoritmo 6.</p><p>Uma melhoria no algoritmo de Dijkstra apresentado é na linha 10. Nesse pon-</p><p>to, o algoritmo retorna todos os vértices adjacentes a v, mas pode-se melhorá-lo</p><p>para que sejam considerados somente vértices que ainda não foram analisados,</p><p>isto é, aqueles pertencentes a V’</p><p>CONSIDERAÇÕES FINAIS</p><p>Muitos problemas em grafos, bem como problemas reais mapeados para grafos,</p><p>são essencialmente resolvidos pela aplicação de algoritmos de busca ou adaptações.</p><p>Assim, estes representam um papel importante no entendimento e nas aplicações da</p><p>teoria de grafos.</p><p>Para grafos não ponderados, foi apresentado que a busca em largura é capaz de en-</p><p>contrar o caminho mínimo entre dois vértices, levando em consideração que o tamanho</p><p>ou o custo de um caminho não ponderado é dado em número de arestas. Para grafos</p><p>ponderados, o tamanho ou o custo de um caminho é gerado pela soma dos custos de</p><p>suas arestas, assim, faz-se necessário o uso do algoritmo de Dijkstra, o qual calcula o</p><p>Caminho mínimo e árvores geradoras 71</p><p>custo dos caminhos entre um vértice inicial e todos os demais vértices</p><p>do grafo. Vale</p><p>ressaltar que o algoritmo de Dijkstra exige a positividade dos custos das arestas.</p><p>Já no caso de grafos em que o custo das arestas pode ser negativo, deve-se aplicar</p><p>o algoritmo de Bellman-Ford. E para encontrar o caminho mínimo entre todos os pa-</p><p>res de vértices de um grafo, utiliza-se o algoritmo de Floyd-Warshall.</p><p>Outro problema apresentado foi o de encontrar a árvore geradora mínima em</p><p>grafos conexos e ponderados, também usada em vários problemas em grafos. Uma</p><p>árvore geradora é uma árvore formada por todos os vértices do grafo, de modo que</p><p>o custo da árvore é a soma dos custos individuais de suas arestas. Para tanto, foram</p><p>apresentados os algoritmos clássicos de Prim e Kruskal.</p><p>ATIVIDADES</p><p>1. Considere o grafo a seguir.</p><p>Aplique o algoritmo de busca em profundidade,</p><p>iniciando em v1. Dê a árvore de busca em</p><p>profundidade resultante.</p><p>Restrição: para efeito de escolha de vértices</p><p>a serem analisados, assuma que os vértices</p><p>do grafo estão ordenados e que você sempre</p><p>escolhe o qual tem índice menor. Por exemplo,</p><p>se em um ponto de escolha há os vértices v6 e</p><p>v3, você deve selecionar, primeiramente, o v3.</p><p>2. Observe o grafo a seguir.</p><p>Aplique o algoritmo de busca em largura,</p><p>iniciando em v1. Dê a árvore de busca em lar-</p><p>gura resultante.</p><p>Restrição: para efeito de escolha dos</p><p>vértices a serem analisados, assuma que os</p><p>vértices do grafo estão ordenados e que você</p><p>sempre escolhe o qual tem índice menor. Por</p><p>exemplo, se em um ponto de escolha há os</p><p>vértices v6 e v3, você deve selecionar, primei-</p><p>ramente, o v3.</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>72 Teoria dos Grafos</p><p>3. Dado o grafo a seguir, aplique o algoritmo de Prim, iniciando em v1, e encontre a</p><p>árvore geradora mínima.</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>1</p><p>10</p><p>4</p><p>2</p><p>35</p><p>3 4</p><p>4. Dado o grafo a seguir, aplique o algoritmo de Kruskal, iniciando em v1, e encontre a</p><p>árvore geradora mínima.</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>1</p><p>10</p><p>4</p><p>2</p><p>35</p><p>3 4</p><p>5. Dado o grafo a seguir, aplique o algoritmo de Dijkstra e encontre todos os rótulos</p><p>e todas as distâncias, partindo do vértice v1.</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>1</p><p>10</p><p>4</p><p>2</p><p>35</p><p>3 4</p><p>Caminho mínimo e árvores geradoras 73</p><p>REFERÊNCIAS</p><p>BARROSO, M. M. de A. Aplicação de grafos em um problema de rede. Abakós, v. 2, n. 2, p. 48-78, 30</p><p>maio 2014. Disponível em: http://periodicos.pucminas.br/index.php/abakos/article/view/P.2316-</p><p>9451.2014v2n2p48. Acesso em: 29 maio 2020.</p><p>FEOFILOFF, P. Algoritmos para Grafos via Sedgewick, 2020. Página inicial. Disponível em: https://www.ime.</p><p>usp.br/~pf/algoritmos_para_grafos/. Acesso em: 29 maio 2020.</p><p>FLOYD, R. W. Algorithm 97: Shortest path. Communications of the ACM, v. 5, n. 6, p. 345, jun. 1962. Disponível</p><p>em: https://dl.acm.org/doi/10.1145/367766.368168. Acesso em: 29 maio 2020.</p><p>FREDMAN, M. L.; TARJAN, R. E. Fibonacci heaps and their uses in improved network optimisation</p><p>algorithms. Journal of the ACM, v. 34, n. 3, p. 596-615, jul. 1987. Disponível em: https://dl.acm.org/</p><p>doi/10.1145/28869.28874. Acesso em: 29 maio 2020.</p><p>GOLDBARG, M. C.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. 1. ed. Rio de Janeiro: Elsevier,</p><p>2012.</p><p>JOHNSON, D. B. Priority queues with update and finding minimum spanning trees. Information Processing</p><p>Letters, v. 4, n. 3, p. 53-57, dez. 1975. Disponível em: https://www.sciencedirect.com/science/article/abs/</p><p>pii/0020019075900010. Acesso: 29 maio 2020.</p><p>KRUSKAL, J. B. On the shortest spanning subtree of a graph and the traveling salesman problem.</p><p>Proceedings of the American Mathematical Society, v. 7, n. 1, p. 48-50, fev. 1956. Disponível em: https://www.</p><p>jstor.org/stable/2033241?seq=1. Acesso em: 29 maio 2020.</p><p>PRIM, R. C. Shortest connection networks and some generalizations. The Bell System Technical Journal,</p><p>v. 36, n. 6, p. 1389-1401, nov. 1957. Disponível em: https://ieeexplore.ieee.org/document/6773228. Acesso</p><p>em: 29 maio 2020.</p><p>SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.</p><p>74 Teoria dos Grafos</p><p>4</p><p>Grafos eulerianos e hamiltonianos</p><p>Este capítulo trata de grafos que têm certas características específicas:</p><p>os eulerianos e os hamiltonianos. São apresentados teoremas que carac-</p><p>terizam esses grafos, algumas aplicações e alguns algoritmos.</p><p>Para tanto, o estudo está organizado do seguinte modo: na Seção 4.1</p><p>são abordados os conceitos que definem quando um grafo é euleriano, os</p><p>teoremas que apresentam condições necessárias e suficientes, e os algo-</p><p>ritmos para a construção de um caminho euleriano. Já na Seção 4.2 estão</p><p>descritas as condições para que um grafo seja hamiltoniano, bem como os</p><p>teoremas que colocam as condições suficientes (mas não necessárias) e a</p><p>discussão de algoritmos para encontrar um caminho hamiltoniano.</p><p>4.1 Grafos eulerianos</p><p>Vídeo Os grafos eulerianos possuem esse nome graças a Leonhard Euler (1707–1783),</p><p>que, em 1736, resolveu o famoso problema das sete pontes de Königsberg, dando</p><p>origem à teoria dos grafos (SZWACFITER, 2018). O enigma se passa na cidade de</p><p>Kaliningrado, que, à época, era conhecida como Königsberg. A cidade é cortada</p><p>pelo Rio Prególia e possuía sete pontes (Figura 1), das quais duas foram destruídas</p><p>por bombardeios na Segunda Guerra Mundial.</p><p>Figura 1</p><p>As pontes de Königsberg.</p><p>As marcações em ver-</p><p>melho indicam as pontes</p><p>destruídas na Segunda</p><p>Guerra Mundial.</p><p>Se</p><p>rg</p><p>ey</p><p>M</p><p>er</p><p>ku</p><p>lo</p><p>v/</p><p>Sh</p><p>ut</p><p>te</p><p>rs</p><p>to</p><p>ck</p><p>Figura 2</p><p>Grafo do problema das 7</p><p>pontes de Königsberg</p><p>v1</p><p>v2</p><p>v3</p><p>v4</p><p>Fonte: Elaborada pelo autor.</p><p>Grafos eulerianos e hamiltonianos 75</p><p>4.1 Grafos eulerianos</p><p>Vídeo Os grafos eulerianos possuem esse nome graças a Leonhard Euler (1707–1783),</p><p>que, em 1736, resolveu o famoso problema das sete pontes de Königsberg, dando</p><p>origem à teoria dos grafos (SZWACFITER, 2018). O enigma se passa na cidade de</p><p>Kaliningrado, que, à época, era conhecida como Königsberg. A cidade é cortada</p><p>pelo Rio Prególia e possuía sete pontes (Figura 1), das quais duas foram destruídas</p><p>por bombardeios na Segunda Guerra Mundial.</p><p>Figura 1</p><p>As pontes de Königsberg.</p><p>As marcações em ver-</p><p>melho indicam as pontes</p><p>destruídas na Segunda</p><p>Guerra Mundial.</p><p>Se</p><p>rg</p><p>ey</p><p>M</p><p>er</p><p>ku</p><p>lo</p><p>v/</p><p>Sh</p><p>ut</p><p>te</p><p>rs</p><p>to</p><p>ck</p><p>Figura 2</p><p>Grafo do problema das 7</p><p>pontes de Königsberg</p><p>v1</p><p>v2</p><p>v3</p><p>v4</p><p>Fonte: Elaborada pelo autor.</p><p>Na época, havia uma discussão se era possível atravessar todas as pontes, ini-</p><p>ciando e retornando na mesma margem, sem repetir qualquer uma delas. Em 1736,</p><p>Euler provou que não era possível e, para isso, mapeou o problema com pontos e</p><p>linhas ligando-os, conforme a Figura 2. Por esse diagrama,</p><p>indicou as condições necessárias e suficientes para que fos-</p><p>se possível atravessar todas as pontes somente uma vez,</p><p>iniciando e terminando na mesma margem, e destacou que</p><p>as pontes de Königsberg não possuíam tais condições. As-</p><p>sim, surgiu a teoria dos grafos.</p><p>Como mencionado, ao longo desta seção serão apre-</p><p>sentadas as condições necessárias e suficientes para que</p><p>um grafo seja euleriano, bem como a discussão dos teo-</p><p>remas e algoritmos envolvidos para a construção de ciclos</p><p>eulerianos.</p><p>Dado um grafo não dirigido e conexo G = (V, A), um ca-</p><p>minho euleriano é um caminho que passa por todas as</p><p>arestas do grafo somente uma vez. Ou seja, é uma sequên-</p><p>cia de vértices, v1, v2, ..., vk, tal que vi ∈ V e (vi, vi+1) ∈ A, para</p><p>todo i, 1 ≤ i ≤ k, de modo que todas as arestas (vi, vi+1) do</p><p>grafo estão presentes nesse caminho somente uma vez.</p><p>Considere o grafo G = (V, A) da Figura 3 e o mesmo grafo</p><p>G com arestas rotuladas da Figura 4.</p><p>Figura 3</p><p>Grafo com caminho euleriano</p><p>v1</p><p>v2</p><p>v3</p><p>v4</p><p>v5</p><p>v6</p><p>v7</p><p>Fonte: Elaborada pelo autor.</p><p>76 Teoria dos Grafos</p><p>Figura 4</p><p>Grafo com arestas rotuladas e caminho euleriano</p><p>v1</p><p>v2</p><p>v3</p><p>v4</p><p>v5</p><p>v6</p><p>v7</p><p>a1</p><p>a2</p><p>a3</p><p>a4</p><p>a5</p><p>a6</p><p>a7</p><p>a8</p><p>Fonte: Elaborada pelo autor.</p><p>Na Figura 4, o grafo não dirigido G = (V, A) pode ser descrito por meio de seus</p><p>componentes:</p><p>• Vértices: V = {v1, v2, v3, v4, v5, v6, v7}</p><p>• Arestas: A = {(v1, v2), (v2, v3), (v3, v4), (v4, v5), (v4, v2), (v4, v6), (v6, v7), (v7, v2)}</p><p>• Arestas nomeadas:</p><p>a1 = (v1, v2)</p><p>a2 = (v7, v2)</p><p>a3 = (v4, v2)</p><p>a4 = (v4, v6)</p><p>a5 = (v6, v7)</p><p>a6 = (v4, v5)</p><p>a7 = (v3, v4)</p><p>a8 = (v2, v3)</p><p>Dado o caminho {v1, v2, v3, v4, v2, v7, v6, v4, v5}, é possível passar por todas as</p><p>arestas somente uma vez na seguinte ordem: a1, a8, a7, a3, a2, a5, a4, a6. Portanto,</p><p>diz-se que o grafo G possui um caminho euleriano. Se este for um ciclo, isto é,</p><p>começar e terminar no mesmo vértice, é chamado de ciclo euleriano.</p><p>Considere o grafo G = (V, A) apresentado na Figura 5, contendo arestas rotuladas.</p><p>Grafos eulerianos e hamiltonianos 77</p><p>Figura 5</p><p>Grafo com arestas rotuladas e ciclo euleriano</p><p>v1 v2</p><p>v4v5</p><p>v3v6v7</p><p>a1</p><p>a2</p><p>a3</p><p>a4</p><p>a5</p><p>a10</p><p>a9</p><p>a6</p><p>a7</p><p>a8</p><p>Fonte: Elaborada pelo autor.</p><p>O grafo G (Figura 5) pode, também, ser descrito por meio de seus elementos:</p><p>• Vértices: V = {v1, v2, v3, v4, v5, v6, v7}</p><p>• Arestas: A = {(v1, v2), (v2, v3), (v3, v4), (v4, v5), (v4, v2), (v4, v6), (v6, v7), (v7, v2), (v1, v7),</p><p>(v7, v5)}</p><p>• Arestas nomeadas:</p><p>• a1 = (v1, v2)</p><p>• a2 = (v7, v2)</p><p>• a3 = (v4, v2)</p><p>• a4 = (v4, v6)</p><p>• a5 = (v6, v7)</p><p>• a6 = (v4, v5)</p><p>• a7 = (v3, v4)</p><p>• a8 = (v2, v3)</p><p>• a9 = (v1, v7)</p><p>• a10 = (v7, v5)</p><p>Dado o caminho {v7, v5, v4, v6, v7, v2, v4, v3, v8, v1, v7}, percebe-se que é possível</p><p>passar por todas as arestas do grafo, somente uma vez, a saber: a10, a6, a4, a5, a2, a3,</p><p>a7, a8, a1, a9. Portanto, trata-se de um caminho euleriano. Também vê-se que esse</p><p>caminho é um ciclo e que, desse modo, o grafo contém um ciclo euleriano.</p><p>Denomina-se grafo euleriano um grafo que possui um ciclo euleriano. Assim,</p><p>pode-se dizer que o grafo da Figura 5 é euleriano.</p><p>Se um grafo possui um caminho euleriano, mas não um ciclo euleriano, então,</p><p>é dito semieuleriano. Para que um grafo semieuleriano se torne euleriano, deve-se</p><p>inserir uma aresta entre o vértice de origem e o de término do caminho euleriano</p><p>78 Teoria dos Grafos</p><p>(NICOLETTI; HRUSCHKA JUNIOR, 2018). O grafo da Figura 3, por exemplo, é um gra-</p><p>fo semieuleriano. Adicionando-se a aresta (v1, v5), consegue-se um grafo euleriano,</p><p>pois resulta o seguinte ciclo: {v1, v2, v3, v4, v2, v7, v6, v4, v5, v1}, que é um ciclo euleriano.</p><p>A Figura 6, por sua vez, apresenta o mesmo grafo com a aresta inserida (represen-</p><p>tada pela linha tracejada para facilitar a visualização).</p><p>Figura 6</p><p>Grafo semieuleriano com aresta inserida</p><p>v1</p><p>v2</p><p>v4</p><p>v5</p><p>v3</p><p>v6</p><p>v7</p><p>Fonte: Elaborada pelo autor.</p><p>Convém ressaltar que um grafo desconexo não pode ser euleriano, pois não há</p><p>a possibilidade de se conseguir um ciclo euleriano, isto é, passando por todas as</p><p>arestas, visto que parte do grafo está desconectada.</p><p>Observe a seguir dois teoremas importantes que caracterizam os grafos</p><p>eulerianos.</p><p>Teorema 1</p><p>Seja o grafo G = (V, A), tal que o grau de todos os vértices é, pelo menos, dois,</p><p>então, G contém um ciclo.</p><p>Prova: se o grafo G não for simples, ou seja, possuir laços (arestas incidindo no</p><p>mesmo vértice) ou arestas paralelas (arestas distintas incidindo sobre os mesmos</p><p>vértices), claramente G tem um ciclo, pois um laço é um ciclo de comprimento 1, e</p><p>duas arestas paralelas formam um ciclo de tamanho 2.</p><p>Se o grafo G for simples, assume-se um vértice qualquer de G, v0, tomado como</p><p>ponto de partida. Assim, como grau(v0) ≥ 2, consegue-se escolher uma aresta, a1,</p><p>que incide em outro vértice diferente de v0 (caso fosse obrigatório voltar a v0, o gra-</p><p>fo não seria simples). Como grau(v1) deve ser maior ou igual a 2, seleciona-se outra</p><p>aresta, a2, que incide em outro vértice diferente de v1, por exemplo, v2. O processo</p><p>Grafos eulerianos e hamiltonianos 79</p><p>continua até que seja escolhida uma aresta ei, que incida nos vértices vi-1 e vi, de</p><p>modo que vi-1 ≠ vi. Como G tem um número finito de vértices, eventualmente será</p><p>necessário escolher uma aresta que incida sobre um vértice, chamado de vk, o qual</p><p>já foi escolhido. Assim, se o vértice vk foi escolhido duas vezes, o caminho entre sua</p><p>primeira escolha até a sua segunda escolha é um ciclo, pois os vértices pertencen-</p><p>tes são distintos: o caminho inicia em vk e termina em vk.</p><p>Já o Teorema 2 caracteriza os grafos eulerianos pelo grau de seus vértices. Esse</p><p>teorema apresenta a condição necessária e suficiente para que um grafo seja eu-</p><p>leriano. A prova da ida foi dada por Euler (1736) e a da volta por Hierholzer (1873)</p><p>(BOAVENTURA NETTO, 2003).</p><p>Teorema 2</p><p>Seja o grafo conexo G = (V, A). G é um grafo euleriano se, e somente se, o grau</p><p>de todo vértice de G for par.</p><p>Prova de ida →: se o grafo G é euleriano, o grau de todo vértice de G é par.</p><p>Considere que o grafo G é euleriano, portanto, possui um ciclo que passa por</p><p>todas as arestas de G somente uma vez. Caminhando pelo ciclo euleriano, ao pas-</p><p>sar por um vértice qualquer, deve-se ter duas arestas incidentes, uma para chegar</p><p>ao vértice e outra para sair do vértice. Sendo assim, o grau de todo vértice do ciclo</p><p>é par e o grau de todo vértice de G é par.</p><p>Prova de volta ←: se o grau de todo vértice de G é par, então, G é euleriano.</p><p>Essa demonstração será feita pela indução no número de arestas a = |A(G)|.</p><p>Considere que o grau de todo vértice de G é par.</p><p>Base da indução: o teorema é verdade para o grafo com número de arestas</p><p>igual a zero (a = 0), pois G é conexo, tem somente um vértice.</p><p>Passo indutivo: assuma que a > 1 (o grafo possui mais de uma aresta) e que</p><p>o teorema é válido para todo grafo com número de arestas menor que a. Isto</p><p>é, se o grafo possui vértices com grau par e menos do que a arestas, então, é</p><p>euleriano.</p><p>Hipótese de indução: o teorema é válido para todo grafo com número de ares-</p><p>tas menor que a. Se um grafo possui menos que a arestas e o grau de todos os seus</p><p>vértices é par, é euleriano.</p><p>Como G é conexo e o grau de seus vértices é par, estes devem possuir grau</p><p>maior que 2. Como a quantidade de arestas de G é a > 1, o número de vértices</p><p>de G, V(G) é maior ou igual a 2. Assim, pelo Teorema 1, o grafo possui um ciclo</p><p>C = {v1, v2, ..., vk, v1}.</p><p>Considere G’ o grafo resultante da retirada das arestas participantes do ciclo C,</p><p>ou seja, G’ = (V, A \ A(C)). Como cada vértice em C participa do ciclo com um vértice</p><p>de entrada e outro de saída, a retirada das arestas pertencentes a C, para gerar</p><p>80 Teoria dos Grafos</p><p>o grafo G’, remove graus dos vértices aos pares, mantendo a propriedade de que</p><p>todos os vértices têm grau par.</p><p>Assim, as componentes conexas de G’ contêm somente vértices com grau par.</p><p>Sejam G’1, G’2, ..., G’l as componentes conexas não triviais (que possuem mais de um</p><p>vértice e mais de uma aresta) de G’, claramente |A(G’i)| < a, tal que i = 1, 2, ..., l. Isto</p><p>é, a quantidade de arestas nessas componentes conexas é menor que a quantida-</p><p>de de arestas do grafo G.</p><p>Assim, pela hipótese de indução, cada G’i, tal que i = 1, 2, ..., l, possui um ciclo</p><p>euleriano, denotado aqui como Ti.</p><p>Como G é conexo, pelo menos um vértice de cada componente conexa de G’</p><p>está presente em C, isto é, V(C) ∩ V(G’i) ≠ ∅. Tome v’i como sendo o vértice mais à es-</p><p>querda da sequência de vértices de C, tal que vi ∈ V(C) ∩ V(G’i). Sendo assim, v’i está</p><p>presente em C e na componente conexa G’i. Dado o ciclo C, consegue-se separá-lo</p><p>nos seguintes componentes:</p><p>• C1 = {v1, ..., v’l-1}</p><p>• Ci = {v’i+1, ..., v’r-1}</p><p>• Cl+1 = {v’l+1, ..., v1}</p><p>Essa separação indica exatamente os vértices compartilhados entre C e as com-</p><p>ponentes conexas, apontando, dentro de C, a sua localização. Para 2 ≤ i ≤ l, tem-se</p><p>o ciclo C = {C1, v’1, C2, v’2, C3..., Cl, v’l, Cl+1}. Assim, no ciclo C, em cada aparição de um</p><p>vértice compartilhado com uma componente conexa, basta adicionar o ciclo eule-</p><p>riano desta componente, a saber, {C1, T1, C2, T2, C3, ..., Cl, Tl, Cl+1}, resultando em um</p><p>ciclo euleriano.</p><p>Indução é uma técnica de prova muito usada em ciência da computação e matemática discreta, útil</p><p>quando se quer demonstrar afirmações para um conjunto infinito de proposições.</p><p>Existem dois tipos. O primeiro princípio de indução se baseia na prova de duas proposições,</p><p>assumindo uma propriedade P e provando que P(n) é verdade para todo</p><p>de Königsberg</p><p>Euler descobriu que só seria possível passar por cada ponte uma única vez caso hou-</p><p>vesse nenhum ou dois pontos de onde saísse um número ímpar de caminhos. Assim,</p><p>para que fosse possível chegar em um ponto e depois sair por uma aresta diferente,</p><p>cada ponto deveria conter um número par de arestas (um para entrar, outro para sair).</p><p>Os dois pontos com número ímpar de caminhos representam o início e o final do per-</p><p>curso, pois não precisam de uma aresta para entrar e uma para sair. Se não houvesse</p><p>um número ímpar de caminhos, o percurso começaria e terminaria no mesmo ponto.</p><p>O autor, então, provou que para um grafo conexo ser euleriano, isto é, possuir</p><p>um ciclo que passe por todas as arestas de um grafo somente uma vez, iniciando</p><p>e terminando no mesmo vértice, todos os vértices precisam possuir um número</p><p>par de arestas incidentes. O artigo de Euler foi considerado o primeiro resultado da</p><p>teoria dos grafos, uma vez que continha o primeiro teorema provado dessa nova</p><p>área, o qual determinou um método para solucionar problemas desse tipo.</p><p>Introdução ao estudo dos grafos 11</p><p>Outros problemas também foram resolvidos pela teoria dos grafos, como a colo-</p><p>ração de mapas. Determinar o mínimo de cores necessário para se colorir o desenho</p><p>de um mapa era uma difícil missão, até que Francis Guthrie (1831–1899) conjecturou,</p><p>em 1852, que era preciso, no mínimo, quatro cores. Mas apenas em 1976 essa hipó-</p><p>tese foi comprovada por Kenneth Appel (1932–2013) e Wolfgang Haken (1928–), com</p><p>a ajuda de um IBM 360. A solução de Appel e Haken foi a construção de um programa</p><p>que verificava todos os possíveis exemplos de mapas (1936 ao todo), sendo esse o</p><p>primeiro teorema matemático provado com o auxílio de um computador, o que tam-</p><p>bém gerou controvérsia. A descoberta ficou conhecida como o teorema das quatro</p><p>cores. A figura a seguir mostra o mapa do Brasil colorido com quatro cores, sendo os</p><p>estados adjacentes coloridos com cores diferentes.</p><p>Filip Bjorkm</p><p>an/Shutterstock</p><p>Apesar de o artigo de Euler ser o primeiro resultado da teoria dos grafos, o ter-</p><p>mo foi utilizado pela primeira vez, com a conotação aqui apresentada, por James</p><p>Joseph Sylvester (1814–1897) e Arthur Cayley (1821–1895). Em 1857, os estudiosos</p><p>aplicaram os conceitos de grafos à química, enumerando isômeros de hidrocar-</p><p>bonetos, visto que toda molécula também pode ser representada por um diagra-</p><p>ma. O termo grafo apareceu nas palavras dos autores em um artigo publicado em</p><p>1878, no primeiro volume do American Journal of Mathematics Pure and Applied, na</p><p>revista Nature.</p><p>Em 1859, William Rowan Hamilton (1805–1865) elaborou um jogo chamado</p><p>icosiano ou viagem à volta do mundo, inspirado pela prática de caixeiro-viajante.</p><p>O objetivo era encontrar caminhos e circuitos no grafo dodecaédrico, satisfazendo</p><p>determinadas condições, como achar um circuito que passasse uma única vez por</p><p>cada vértice do grafo (conhecido como caminho hamiltoniano).</p><p>Em 1930, Kazimierz Kuratowski (1896–1980) encontrou uma condição</p><p>necessária e suficiente para a planaridade de um grafo (desenhar um grafo com</p><p>arestas que não se cruzam). Já o primeiro livro didático sobre grafos foi escrito por</p><p>Dénes König (1884–1944) em 1936.</p><p>IBM 360 é um mainframe lan-</p><p>çado pela empresa International</p><p>Business Machines Corporation</p><p>(IBM) em 1964. Trata-se de um</p><p>dos primeiros computadores</p><p>fabricados com a utilização de</p><p>circuitos integrados.</p><p>Saiba mais</p><p>caixeiro-viajante: representante</p><p>de vendas; uma pessoa que vendia</p><p>produtos em outras cidades e que,</p><p>para isso, fazia muitas viagens.</p><p>Glossário</p><p>dodecaedro: sólido contendo 12</p><p>faces, limitado por polígonos, com</p><p>30 arestas e 20 vértices.</p><p>Glossário</p><p>12 Teoria dos Grafos</p><p>Em 1962, Lester Randolph Ford (1886–1967) e Delbert Ray Fulkerson (1924–</p><p>1976) desenvolveram a teoria dos fluxos em redes, um dos mais importantes resul-</p><p>tados da teoria dos grafos. Esse estudo é muito usado hoje em dia na distribuição</p><p>de energia, na capacidade de redes de computadores, entre outras aplicabilidades,</p><p>possibilitando o mapeamento e a análise dos fluxos em redes.</p><p>Atualmente, os grafos aparecem em várias áreas e modelam problemas di-</p><p>versos. O mapeamento de amigos em uma rede social é um exemplo disso, sen-</p><p>do os vértices as pessoas e as arestas a relação de amizade entre elas. A própria</p><p>internet pode ser vista como um grafo, em que cada dispositivo conectado é um</p><p>vértice e cada conexão, com ou sem fio, é uma aresta. Até mesmo aplicativos</p><p>de mapas usam algoritmos de grafos para traçar uma rota entre dois pontos e</p><p>calcular tempos de viagem. Redes de telefonia, saneamento básico, distribuição</p><p>de energia, transporte público, todos esses serviços são exemplos da aplicação</p><p>de grafos.</p><p>1.2 Noções e definições básicas</p><p>Vídeo Um grafo G é um par (V, A) em que V é um conjunto não vazio de vértices, tam-</p><p>bém representado por V (G), e A é um conjunto finito de arestas, também represen-</p><p>tado por A (G). Cada aresta é um par não ordenado (v, w) que pode ser denotado</p><p>como vw ou wv, sendo v, w ∈ V. Uma aresta vw incide em v e w, sendo estes pontas</p><p>da aresta (BOAVENTURA NETTO; JURKIEWICZ, 2009).</p><p>No geral, usa-se uma representação gráfica de um grafo para facilitar o entendi-</p><p>mento, por exemplo, o grafo G = (V, A):</p><p>V = {v1, v2, v3, v4, v5}</p><p>A = {(v1, v2), (v2, v3), (v2, v4), (v4, v5), (v2, v5), (v4, v4), (v1, v2)}</p><p>O grafo G pode ser visto da seguinte maneira:</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 1</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>Para facilitar o entendimento, pode-se nomear as arestas da seguinte forma:</p><p>V = {v1, v2, v3, v4, v5}</p><p>A = {a1, a2, a3, a4, a5, a6, a7}</p><p>Tal que: a1 = (v1, v2 ), a2 = (v2, v3 ), a3 = (v2, v4), a4 = (v4, v5), a5 = (v2, v5), a6 = (v4, v4), a7 = (v1, v2)</p><p>No filme Gênio Indomável,</p><p>Will Hunting (Matt Damon)</p><p>é faxineiro em uma univer-</p><p>sidade e possui um grande</p><p>talento para a matemá-</p><p>tica. Em uma das cenas,</p><p>o professor Lambeau</p><p>(Stellan Skarsgård) deixa</p><p>um problema de grafos</p><p>no quadro como desafio</p><p>para seus alunos de</p><p>pós-graduação e Hunting o</p><p>resolve, impressionando o</p><p>professor e seus alunos.</p><p>Direção: Gus Van Sant Jr. Estados</p><p>Unidos: Miramax, 1997.</p><p>Filme</p><p>Introdução ao estudo dos grafos 13</p><p>Então, representa-se da seguinte maneira o que é chamado grafo rotulado:</p><p>Figura 2</p><p>Grafo com arestas nomeadas</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>a6</p><p>a4</p><p>a5</p><p>a2</p><p>a7</p><p>a1</p><p>a3</p><p>Se no grafo G todas as suas arestas (v, w) são tais que v ≠ w e não existem duas</p><p>arestas diferentes que incidem nos mesmos vértices, diz-se que o grafo é simples.</p><p>O grafo com arestas nomeadas (Figura 2) não é simples, pois tem duas arestas en-</p><p>tre os vértices v1 e v2, e o vértice v4 tem uma aresta com ele mesmo.</p><p>Se um grafo é simples e possui arestas entre todos os seus vértices é denomina-</p><p>do completo. Por exemplo, os grafos da Figura 3 são completos.</p><p>Figura 3</p><p>Grafos completos</p><p>v5v4</p><p>v1 v3</p><p>v2</p><p>v1 v2</p><p>v3v4</p><p>v1 v3</p><p>v2v2</p><p>v1</p><p>Fonte: Elaborada pelo autor.</p><p>Assim, o grafo G = (V, A) é completo se A = V2, em que V2 representa o conjunto</p><p>de todos os pares não ordenados de elementos de V. Assim, G = (V, A) é completo</p><p>se, e somente se,</p><p>A</p><p>v, w ∈ V, v ≠ w,</p><p>E</p><p>a ∈ A, a = (v, w) (Figura 4).</p><p>Figura 4</p><p>Grafo completo</p><p>Fonte: Elaborada pelo autor.</p><p>v4 v5</p><p>v3</p><p>v2</p><p>v1</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>14 Teoria dos Grafos</p><p>Os grafos completos são também denominados Kn, em que n é o número corres-</p><p>pondente à quantidade de vértices. Assim, na Figura 3, tem-se K1, K2, K3, K4, K5.</p><p>O complemento de um grafo G = (V, A) é o grafo G = (V, V2\A). Isto é, assumindo o</p><p>grafo completo formado por todos os vértices V, o grafo complemento G é formado</p><p>por todas as arestas resultantes da retirada das arestas A do grafo G.</p><p>Por exemplo, seja o grafo G = (V, A), como na figura a seguir (Figura 5), seu com-</p><p>plemento (Figura 6) é o grafo G = (V, V2\A).</p><p>Figura 5</p><p>Grafo g</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 6</p><p>Complemento do grafo g</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Essas definições apresentadas</p><p>n inteiro positivo. Deve-se</p><p>provar:</p><p>1. P(1) é verdade</p><p>2. ∀k P(k) → P(k+1)</p><p>A proposição 1 é chamada de base da indução ou passo básico. Ela garante o ponto de partida,</p><p>provando o caso inicial. A proposição 2 é denominada de passo indutivo. Assume-se que P(k) seja</p><p>verdadeiro, o que é conhecido como hipótese de indução; então, prova-se que, dadas essas condi-</p><p>ções, P(k+1) é verdadeiro.</p><p>O segundo princípio de indução também baseia-se na prova de duas proposições, com algumas</p><p>alterações, a saber:</p><p>1. P(1) é verdade</p><p>2. ∀k P(r) é verdade para todo r, 1 ≤ r ≤ k → P(k+1)</p><p>A diferença recai sobre a proposição 2, que, no primeiro princípio, para provar P(k+1), assume-se</p><p>somente P(k) como verdade; já no segundo princípio, para provar P(k+1), admite-se que todos os</p><p>P(r), entre 1 e k, são verdadeiros.</p><p>Saiba mais</p><p>Para encontrar um ciclo euleriano em um grafo, são mostrados aqui dois algo-</p><p>ritmos: o de Hierholzer e o de Fleury. Ambos assumem que o grafo de entrada é</p><p>euleriano e retornam o ciclo partindo de algum vértice.</p><p>Grafos eulerianos e hamiltonianos 81</p><p>O algoritmo de Hierholzer, de 1873, foi um dos primeiros a ser proposto, po-</p><p>dendo ser visto no Algoritmo 1 a seguir. Seu princípio básico de funcionamento é</p><p>iniciar o processamento partindo-se de vértices. Assim que um vértice é escolhido,</p><p>encontra-se um pequeno ciclo, com arestas aleatórias, o qual será agregado ao</p><p>ciclo euleriano final. O ciclo formado por todos os pequenos ciclos adicionados é o</p><p>resultado a ser retornado pelo algoritmo.</p><p>Fonte: Adaptado de Goldbarg e Goldbarg, 2012.</p><p>Algoritmo 1</p><p>Algoritmo de Hierholzer</p><p>Algoritmo: Constrói um Ciclo Euleriano</p><p>Dados: Grafo G = (V, A) euleriano</p><p>1 Escolha um vértice v qualquer de G</p><p>2 Faça G’= (V’, A’), tal que V’ = V e A’ = A</p><p>3 Faça C = {v}</p><p>4 ENQUANTO A’ FAÇA</p><p>5 Escolha v’ C, tal que grau(v’) > 0 em G’</p><p>6 C’ <- Um ciclo em G’ iniciando e terminando em v’, percorrendo</p><p>arestas aleatórias</p><p>7 G’ <- ( V’, A’ \ A(C’) )</p><p>8 Substituir em C o vértice v’ pelo ciclo C’</p><p>9 FIM ENQUANTO</p><p>10 Retorne C</p><p>Dado um grafo euleriano G = (V, A), o processo inicia escolhendo-se um vértice</p><p>aleatório de G e adicionando-o a C, que conterá um ciclo euleriano ao final. Tam-</p><p>bém é construído um grafo auxiliar G’, o qual será usado para controlar as arestas</p><p>já inseridas em C. G’ e é chamado de grafo reduzido induzido, pois é construído após</p><p>a retirada de arestas já escolhidas de G.</p><p>Na linha 5, o condicional indica que o laço será executado enquanto houver</p><p>arestas em G’ a serem consideradas. Na linha 6 escolhe-se um vértice qualquer, v’</p><p>de C, que ainda possua arestas incidentes em G’, pois com base neste será construí-</p><p>do um pequeno ciclo em G’.</p><p>Na linha 6, partindo-se de v’, escolhido anteriormente, retorna-se um ciclo C’</p><p>no grafo G’, começando e terminando em v’ e percorrendo quaisquer arestas de</p><p>maneira aleatória, mas que formem um ciclo.</p><p>Dado o ciclo C’ previamente encontrado, retira-se todas as arestas perten-</p><p>centes a C’ do grafo auxiliar G’. Na linha 8 substitui-se, no conjunto C, o vértice</p><p>v’ pelo ciclo C’.</p><p>O algoritmo de Fleury retorna um ciclo euleriano em um grafo euleriano, ou</p><p>um caminho euleriano em grafos que possuem, no máximo, dois vértices com</p><p>grau ímpar.</p><p>Seja o grafo G dado como entrada no algoritmo de Fleury, para controlar as</p><p>arestas já consideradas, usa-se a marcação de aresta, que basicamente é a reti-</p><p>rada das arestas de G. Estas formam um grafo reduzido induzido.</p><p>82 Teoria dos Grafos</p><p>O Algoritmo 2 usa a regra da ponte. Considerando o grafo reduzido induzido,</p><p>formado pelas arestas que ainda não foram marcadas, escolhe-se uma aresta (v, w)</p><p>que não seja ponte nesse grafo. Se ela não existir, isto é, se só tiver arestas que</p><p>são pontes, então, deve ser escolhida, pois não há alternativa. Em suma, deve-se</p><p>escolher as arestas de modo que a parte do grafo que resta percorrer não fique</p><p>desconexa.</p><p>Fonte: Adaptado de Goldbarg e Goldbarg, 2012.</p><p>Algoritmo: Constrói um Ciclo Euleriano</p><p>Dados: Grafo G = (V, A) euleriano</p><p>1 Escolha um vértice v qualquer de V</p><p>2 Faça C = {v}</p><p>3 REPITA</p><p>4 Escolha uma aresta (v, w) não marcada usando a regra da ponte</p><p>5 Atravesse (v, w)</p><p>6 C <- C {w}</p><p>7 Marcar a aresta (v, w)</p><p>8 v <- w</p><p>9 ATÉ QUE Todas as arestas estejam marcadas</p><p>10 C <- C {v}</p><p>11 Retorne C</p><p>Algoritmo 2</p><p>Algoritmo de Fleury</p><p>O algoritmo começa com a escolha aleatória de um vértice do grafo, o qual é</p><p>incluído em C (linha 2), que conterá o ciclo euleriano.</p><p>Na linha 4 escolhe-se uma aresta não marcada, usando a regra da ponte, isto</p><p>é, seleciona-se uma aresta que não seja ponte no grafo formado pelas arestas não</p><p>marcadas. Na linha 6, o vértice no qual a aresta escolhida incide é adicionado a C, e</p><p>a aresta é marcada na linha 7 para que não seja considerada. A linha 8 garante que</p><p>o processo continue a partir do vértice adjacente à aresta escolhida. O algoritmo se</p><p>repete até que todas as arestas tenham sido marcadas.</p><p>Os conceitos se aplicam também a digrafos. Se um caminho orientado, em um di-</p><p>grafo, contém todas as arestas do grafo somente uma vez, é chamado de caminho</p><p>euleriano. Se esse caminho for um ciclo orientado, é conhecido como ciclo euleriano.</p><p>Um digrafo que contém um ciclo euleriano é chamado de digrafo euleriano.</p><p>Para verificar se um digrafo é euleriano, há uma condição necessária e suficien-</p><p>te. Um digrafo D = {V, A} é euleriano se, e somente se, for unilateralmente conexo</p><p>e se, para todo vértice vi ∈ V, o grau de entrada de vi (denotado como grau+(vi) ou</p><p>o número de vértices que chegam em vi) for igual ao grau de saída de vi (denotado</p><p>como grau- (vi) ou o número de vértices que saem de vi).</p><p>Por exemplo, o digrafo da Figura 7 é euleriano, pois é unilateralmente conexo –</p><p>para cada par de vértices há um caminho orientado entre eles em algum sentido –,</p><p>Grafos eulerianos e hamiltonianos 83</p><p>e, para cada vértice, o número de vértices que entram (grau de entrada) é igual ao</p><p>número de vértices que saem (grau de saída).</p><p>Figura 7</p><p>Digrafo Euleriano</p><p>v1</p><p>v2</p><p>v4</p><p>v5</p><p>v3</p><p>v6</p><p>Fonte: Elaborada pelo autor.</p><p>No digrafo da Figura 7, um ciclo euleriano é: (v6, v4), (v4, v2), (v2,</p><p>v3), (v3, v4), (v4, v5), (v5, v3), (v3, v1), (v1, v5), (v5, v2), (v2, v6).</p><p>Um teorema similar existe para verificar se o digrafo possui</p><p>um caminho euleriano (não um ciclo). Um digrafo D = (V, A) pos-</p><p>sui um caminho euleriano se, e somente se, for unilateralmente</p><p>conexo e se contar com as seguintes condições:</p><p>• Dois de seus vértices e vi e vj forem:</p><p>o grau de entrada de vi é igual ao grau de saída</p><p>mais um, isto é, grau+(vi) = 1 + grau–(vi);</p><p>o grau de saída de vj é igual ao grau de entrada</p><p>mais um, isto é, grau–(vj) = 1 + grau+(vj).</p><p>• Para todos os demais vértices, seus graus de</p><p>entrada e saída devem ser iguais, isto é, ∀v ∈ V,</p><p>grau–(v) = grau+(v).</p><p>Com essas condições, o caminho euleriano inicia em vj (o vér-</p><p>tice com mais arestas de saída do que de entrada) e termina em</p><p>vi (o vértice com mais arestas de entrada do que de saída).</p><p>Como exemplo, pode-se analisar o digrafo da Figura 8, que é</p><p>unilateralmente conexo e os graus dos seus vértices:</p><p>• Vértice v1: grau+(v1) = 1 e grau–(v1) = 2</p><p>• Vértice v2: grau+(v2) = 3 e grau–(v2) = 2</p><p>• Vértice v3: grau+(v3) = 2 e grau–(v3) = 2</p><p>• Vértice v4: grau+(v4) = 2 e grau–(v4) = 2</p><p>• Vértice v5: grau+(v5) = 2 e grau–(v5) = 2</p><p>• Vértice v6: grau+(v6) = 1 e grau–(v6) = 1</p><p>Claramente, percebe-se que o grau de entrada de v2 é o grau</p><p>de saída mais um e que o grau de saída de v1 é o grau de entra-</p><p>da mais um. Todos os demais vértices possuem grau de entrada</p><p>igual ao grau de saída. Assim, esse digrafo (Figura 8) conta com</p><p>um caminho euleriano que inicia exatamente em v1 e que termi-</p><p>na em v2. Um caminho euleriano, nesse digrafo, é: (v1, v5), (v5, v3),</p><p>(v3, v4), (v4, v5), (v5, v2), (v2, v6), (v6, v4), (v4, v2), (v2, v3), (v3, v1), (v1, v2).</p><p>Um problema clássico de grafos eulerianos é o Problema do</p><p>Carteiro Chinês, do inglês, Chinese Postman Problem (CPP). Elabo-</p><p>rado pelo matemático chinês Mei-Ku Kwan, em 1962,</p><p>o dilema é</p><p>enunciado assumindo que um carteiro precisa entregar suas car-</p><p>v1</p><p>v2</p><p>v4</p><p>v5</p><p>v3</p><p>v6</p><p>Figura 8</p><p>Digrafo com caminho euleriano</p><p>Fonte: Elaborada pelo autor.</p><p>84 Teoria dos Grafos</p><p>tas e que, para isso, deve passar por todas as ruas do bairro fazendo um caminho</p><p>mínimo. Nessa tarefa, o entregador não pode repetir vias e deve começar e terminar</p><p>no mesmo ponto de distribuição (GOMES et al., 2009).</p><p>Quando essa questão é mapeada para grafos, cada rua é representada por</p><p>uma aresta e os vértices são as esquinas do bairro. Se o grafo é euleriano, isto</p><p>é, possui um ciclo que passa por todas as arestas ou ruas sem repetir nenhuma</p><p>delas, a solução é simplesmente encontrar esse ciclo. Para detectar rapidamente</p><p>se o grafo é euleriano, pode-se usar o Teorema 2, o qual demonstra que o grau</p><p>de todos os vértices de um grafo euleriano é par. Podem ser aplicados, ainda, os</p><p>algoritmos de Hierholzer ou Fleury. Aqui estão sendo desconsiderados os pesos</p><p>das arestas, não gerando um grafo ponderado, para facilitar a compreensão.</p><p>Se o grafo não for euleriano, existirão arestas com grau ímpar. Convém ressaltar</p><p>que o número de vértices de grau ímpar é par, conforme o Lema do Aperto de Mão.</p><p>Caso seja necessário repetir ruas, pode-se adicionar as que não fazem parte da</p><p>área de cobertura para que o caminho mais curto seja encontrado.</p><p>Como pode ser observado, os grafos eulerianos possuem uma caracterização</p><p>matemática clara, teoremas que apresentam as condições necessárias e suficien-</p><p>tes para determinar se um grafo é euleriano, bem como algoritmos definidos para</p><p>encontrar um ciclo euleriano.</p><p>4.2 Grafos hamiltonianos</p><p>Vídeo</p><p>O Lema do Aperto de Mão</p><p>(Handshaking Lemma) indica que</p><p>a soma dos graus dos vértices, em</p><p>um grafo não orientado, é duas</p><p>vezes a quantidade de arestas.</p><p>Como consequência, o número de</p><p>vértices com grau ímpar é sempre</p><p>par. Esse resultado foi provado</p><p>por Euler no ano de 1736 (SILVA,</p><p>2009).</p><p>Saiba mais</p><p>A origem dos grafos hamiltonianos se deu com o matemático britânico Thomas</p><p>Pennington Kirkman (1806–1895), que em 1856 debruçou-se sobre problemas</p><p>de enumeração combinatória em poliedros para buscar, mais especificamen-</p><p>te, condições para que ciclos sem repetição de arestas ou vértices fossem en-</p><p>contrados em poliedros. Antes mesmo de William Rowan Hamilton (1805-1865),</p><p>Kirkman apresentou um exemplo de poliedro contendo um ciclo iniciado em um</p><p>vértice, passando por todos os vértices sem repetição e retornando à origem</p><p>(GOLDBARG; GOLDBARG, 2012).</p><p>Em 1857, Hamilton propôs um jogo chamado Icosiano (ou viagem à volta do</p><p>mundo) cujo objetivo era encontrar caminhos e ciclos em um dodecaedro (poliedro</p><p>de 12 faces), conforme Figura 9.</p><p>Grafos eulerianos e hamiltonianos 85</p><p>Figura 9</p><p>Grafo de representação do jogo icosiano</p><p>Fonte: Elaborada pelo autor.</p><p>Uma solução para o jogo pode ser vista na Figura 10.</p><p>Figura 10</p><p>Solução para o jogo icosiano</p><p>Fonte: Elaborada pelo autor.</p><p>86 Teoria dos Grafos</p><p>O ciclo hamiltoniano de representação da solução do jogo pode ser visto na</p><p>Figura 11.</p><p>Figura 11</p><p>Ciclo hamiltoniano para a</p><p>solução do jogo icosiano</p><p>Fonte: Elaborada pelo autor.</p><p>Apesar de ter sido estudado em 1856, o problema de ciclos hamiltonianos foi</p><p>amplamente difundido em 1934 por Hassler Whitney (1907–1989) e</p><p>Karl Menger (1902–1985) com a publicação de um trabalho na Universidade de</p><p>Princeton (FERNANDO et al., 2019).</p><p>Dado um grafo G = (V, A), em que o caminho contenha todos os</p><p>vértices de G, sendo que cada um aparece somente uma vez, tem-</p><p>-se um caminho hamiltoniano. No grafo da Figura 12, o caminho</p><p>{(v1, v2), (v2, v3), (v3, v4)} contém todos os vértices do grafo somente</p><p>uma vez, portanto, é um caminho hamiltoniano.</p><p>Considere um ciclo sobre G contendo os seguintes vértices:</p><p>v1, v2, v3, ..., vk, v1. Se o caminho v1, v2, v3, ..., vk for hamiltoniano,</p><p>tem-se um ciclo hamiltoniano. Um grafo que contém um ciclo</p><p>hamiltoniano é chamado de grafo hamiltoniano.</p><p>Ao se analisar o grafo da Figura 13 a seguir, percebe-se que</p><p>o caminho (v2, v3), (v3, v5), (v5, v1), (v1, v4) passa por todos os vérti-</p><p>ces exatamente uma vez e que, portanto, trata-se de um cami-</p><p>nho hamiltoniano. No mesmo grafo, o caminho (v2, v3), (v3, v5),</p><p>(v5, v1), (v1, v4), (v4, v2) é um ciclo (começa e termina em v2), sendo</p><p>caracterizado, desse modo, como um ciclo hamiltoniano. Em ra-</p><p>zão disso, o grafo é hamiltoniano.</p><p>Figura 12</p><p>Grafo com caminho hamiltoniano</p><p>v1</p><p>v2</p><p>v4</p><p>v3</p><p>Fonte: Elaborada pelo autor.</p><p>Grafos eulerianos e hamiltonianos 87</p><p>Se um grafo contém um caminho hamiltoniano, mas não</p><p>um ciclo hamiltoniano, é chamado de grafo semi-hamiltoniano.</p><p>Percebe-se que para um grafo semi-hamiltoniano se tornar</p><p>hamiltoniano, basta adicionar uma aresta entre o vértice iní-</p><p>cio e o vértice final do caminho.</p><p>Considere novamente o grafo da Figura 12, o qual contém</p><p>o caminho hamiltoniano {(v1, v2), (v2, v3), (v3, v4)} e, portanto, é</p><p>um grafo semi-hamiltoniano. Para que ele se torne hamilto-</p><p>niano, basta adicionar uma aresta entre o início e o final do</p><p>caminho, no caso (v4, v1), como pode ser visto na Figura 14 cuja</p><p>aresta inserida está tracejada para melhor visualização.</p><p>Como resultado dessa definição, consegue-se perceber</p><p>que um grafo completo Kn, sendo n ≥ 3, é sempre hamilto-</p><p>niano. Isso ocorre porque, em um grafo completo, todos os n</p><p>vértices possuem arestas incidentes em todos os demais n-1</p><p>vértices. Assim, para todo vértice vi, 1 ≤ i ≤ n, existe o seguinte</p><p>caminho C = {(v1, v2), (v2, v3), (v3, v4) … (vn-1, vn )}, o qual passa</p><p>por todos os vértices {v1, …, vn} somente uma vez. Como todos</p><p>vértices são adjacentes a todos os demais, o vértice vn tam-</p><p>bém é adjacente a v1, assim, o caminho C, adicionando a ares-</p><p>ta (vn, v1), é um ciclo que passa por todos os vértices, portanto,</p><p>um ciclo hamiltoniano, e o grafo é hamiltoniano.</p><p>Para grafos hamiltonianos, não se tem uma condição ne-</p><p>cessária e suficiente conhecida (isto é, um teorema do tipo</p><p>“se, e somente se”), como no caso dos grafos eulerianos. Basi-</p><p>camente, os teoremas apresentam condições suficientes para</p><p>que o grafo seja considerado hamiltoniano, como pode ser</p><p>observado a seguir, no Teorema de Ore (1960).</p><p>Figura 13</p><p>Grafo hamiltoniano</p><p>v1</p><p>v2</p><p>v4 v3</p><p>v5</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 14</p><p>Grafo semi-hamiltoniano com aresta inserida</p><p>v1</p><p>v2</p><p>v3</p><p>v4</p><p>Fonte: Elaborada pelo autor.</p><p>Teorema 3</p><p>Teorema de Ore (1960)</p><p>O Teorema de Ore foi provado pelo matemático norueguês</p><p>Øystein Ore (1899–1968) e estabelece que um grafo contendo uma quantidade su-</p><p>ficiente de arestas é hamiltoniano.</p><p>Considere o grafo simples G = (V, A), tal que |V| = n e n ≥ 3. Se para todo par de</p><p>vértices não adjacentes de G, vi e vj for observado que grau(vi) + grau(vj) ≥ n, então,</p><p>G é hamiltoniano.</p><p>A prova se dá por contradição, ou seja, assume-se que o grafo possui as con-</p><p>dições apresentadas, mas não é hamiltoniano. Encontrando-se uma contradição,</p><p>prova-se que o grafo, necessariamente, é hamiltoniano.</p><p>88 Teoria dos Grafos</p><p>Seja o grafo G com as condições apresentadas, mas que não seja hamiltoniano,</p><p>supõem-se que seja semi-hamiltoniano, isto é, possui um caminho hamiltoniano, e a</p><p>adição de uma aresta entre o vértice inicial e final desse caminho o torna hamiltoniano.</p><p>Se o grafo não for semi-hamiltoniano, pode-se adicionar arestas até que seja.</p><p>Convém ressaltar que a adição de arestas extras não contradiz a hipótese, pois</p><p>são acrescentadas em vértices não adjacentes, os quais já atendem à condição de</p><p>que a soma de seus graus é maior que n.</p><p>Assim, para tornar um grafo em hamiltoniano, basta adicionar a aresta (v, w),</p><p>indicando que há um caminho passando por todos os vértices de G. Assumindo</p><p>v = v1 e w = vn, o caminho é: C = {v, v2, v3, ..., vn-1, w}, conforme pode-se ver a seguir.</p><p>v1 v2 vi vn-1 vnvi-1</p><p>... ...</p><p>A hipótese apresentada – grau(v1) + grau(vn) ≥ n – indica que existe um con-</p><p>junto de pelo menos n-2 arestas que incidem em {v1, vn}. Isto é, a aresta (v1, vn)</p><p>aumenta em 1 o grau de v1 e o grau de vn, indicando que, para que a soma de</p><p>seus graus seja maior que n, n-2 arestas precisam incidir em v1 ou vn. Ademais,</p><p>não é possível que todas as n-2 arestas incidam somente em v1 ou vn, pois seria</p><p>necessário, no mínimo, um par de arestas paralelas, contradizendo a condição de</p><p>que G é simples. Isso é facilmente verificável, pois assume-se todas as n-2 arestas</p><p>incidentes somente em v1. Além da aresta que pertence ao caminho C (v1, v2), v2</p><p>seria incidente a v1, em uma nova aresta, para que a condição fosse satisfeita,</p><p>gerando arestas paralelas.</p><p>A figura a seguir mostra essa composição contraditória de arestas. As arestas</p><p>mais finas são as n-2 arestas. Percebe-se que a aresta fina (v1, v2) é paralela à aresta</p><p>(v1, v2), a qual pertence ao caminho C, contradizendo a condição do teorema. Des-</p><p>considerando essa aresta, tem-se n-3 arestas, o que também contradiz a condição</p><p>do teorema, pois, nesse caso, grau(v1) + grau(vn) não seria maior ou igual a n.</p><p>v1 v2 vi vn-1 vnvi-1</p><p>... ...</p><p>Grafos eulerianos e hamiltonianos 89</p><p>Assumindo as n-2 arestas incidentes em {v1, v2}, consegue-se apontar os vértices</p><p>vi e vi-1, tal que vi é adjacente a v1, aresta (vi, v1), e vi-1 é adjacente a vn, aresta (vi-1, vn),</p><p>conforme a figura a seguir.</p><p>v1 v2 vi vn-1 vnvi-1</p><p>... ...</p><p>Posto isso, consegue-se apontar o seguinte ciclo: {v1, v2, ..., vi-1, vn, vn-1, ..., vi+1, vi, v1}. Esse</p><p>ciclo é hamiltoniano, portanto, o grafo G é hamiltoniano, contradizendo a suposição.</p><p>Teorema 4</p><p>Teorema de Dirac (1952)</p><p>Outro teorema conhecido é o Teorema de Dirac, provado pelo matemático hún-</p><p>garo/britânico Gabriel Andrew Dirac (1925–1984). Ele também dá condições sufi-</p><p>cientes para que um grafo seja hamiltoniano com base no grau dos vértices.</p><p>Seja o grafo simples G = (V, A), tal que |V| = n e n ≥ 3, se o grau de todo vértice</p><p>de G é maior ou igual a n/2, isto é, grau(v) ≥ n</p><p>2</p><p>, ∀v ∈ V, então, G é hamiltoniano.</p><p>Prova: se o grau de todos os vértices é maior que n/2, então, para todo par de</p><p>vértices de G, adjacentes ou não, vale a regra:</p><p>grau(v) + grau(w) ≥ n</p><p>2</p><p>n</p><p>2</p><p>+</p><p>Sendo o mesmo que dizer:</p><p>grau(v) + grau(w) ≥ n</p><p>Assim, pelo Teorema de Ore (Teorema 3), G é hamiltoniano.</p><p>As definições de caminho, ciclo e grafo hamiltonianos se aplicam ainda a</p><p>digrafos (grafos orientados). Em um digrafo, um caminho orientado é cha-</p><p>mado de caminho hamiltoniano se contiver todos os vértices do digrafo, sem</p><p>repetição destes. Um ciclo orientado é dito ciclo hamiltoniano se for um ca-</p><p>minho hamiltoniano e se iniciar e terminar no mesmo vértice. Já um digrafo</p><p>é dito hamiltoniano se contiver um ciclo orientado hamiltoniano. Se contiver</p><p>um caminho orientado hamiltoniano, é chamado digrafo semi-hamiltoniano</p><p>(NICOLETTI; HRUSCHKA JUNIOR, 2018).</p><p>90 Teoria dos Grafos</p><p>Algoritmos para encontrar um ciclo hamiltoniano são complicados. Para um</p><p>grafo com n vértices, pode haver n! ciclos hamiltonianos. Ao se pensar em grafos</p><p>completos, que são claramente hamiltonianos, Kn para n > 2, tem-se exatamente n!</p><p>ciclos hamiltonianos, sendo, portanto, um limite superior da quantidade de ciclos</p><p>possíveis.</p><p>Um algoritmo de força bruta, para encontrar um ciclo hamiltoniano em um gra-</p><p>fo, é inviável, pois, dado um grafo com n vértices, tem-se até n! sequências de vér-</p><p>tices que podem ser caminhos hamiltonianos e que devem ser</p><p>enumeradas e testadas.</p><p>Isso ocorre em grafos completos, como o grafo completo K3, re-</p><p>presentado pela Figura 15. Observa-se que ele tem 6 ca-</p><p>minhos (3!), a saber:</p><p>• {(v1, v2), (v2, v3), (v3, v1)}</p><p>• {(v2, v3), (v3, v1), (v1, v2)}</p><p>• {(v3, v1), (v1, v2), (v2, v3)}</p><p>• {(v1, v3), (v3, v2), (v2, v1)}</p><p>• {(v2, v1), (v1, v3), (v3, v2)}</p><p>• {(v3, v2), (v2, v1), (v1, v3)}</p><p>Se for considerado o K4 (grafo completo com quatro</p><p>vértices), apresentado na Figura 16, tem-se 24 cami-</p><p>nhos (4!), e assim por diante.</p><p>Convém ressaltar que quando o problema de en-</p><p>contrar ciclos hamiltonianos se inicia em um vértice</p><p>específico, tem-se (n-1)! ciclos candidatos. Por exem-</p><p>plo, para enumerar todos os ciclos hamiltonianos em</p><p>K4, da Figura 16, iniciando em v1 , tem-se (4-1)!, isto é</p><p>3! ciclos.</p><p>v1 v3</p><p>v2</p><p>Figura 15</p><p>Grafo completo K3</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 16</p><p>Grafo completo K4</p><p>v1</p><p>v2 v3</p><p>v4</p><p>Fonte: Elaborada pelo autor.</p><p>Essa quantidade de valores pode não parecer mui-</p><p>ta, mas considere um algoritmo ingênuo, que enume-</p><p>ra todas as possíveis combinações de ciclos em um grafo com n vértices, resultando</p><p>em (n-1)! ciclos candidatos, e que testa se cada candidato é um ciclo hamiltoniano.</p><p>Considere, também, que para essa tarefa está disponível um computador com a ca-</p><p>pacidade de efetuar 12 trilhões de operações de ponto flutuante por segundo (12*1012),</p><p>isto é, um computador com 12 teraflops 2 . Para varrer todos os possíveis ciclos de um</p><p>grafo com 25 vértices, n = 25, a máquina é capaz de avaliar</p><p>12*10</p><p>24</p><p>12</p><p>= 500 bilhões de</p><p>ciclos candidatos por segundo. Como ele precisa calcular 24! possíveis ciclos, demorará</p><p>24!</p><p>(500 bilhões)</p><p>≅ 39.348 anos, um tempo complemente inviável.</p><p>Para efeitos de comparação, essa</p><p>capacidade de processamento é</p><p>alcançada por alguns consoles de</p><p>videogame, lançados em 2020,</p><p>que possuem hardware dedicado</p><p>ao processamento de vídeo.</p><p>2</p><p>Grafos eulerianos e hamiltonianos 91</p><p>Um dos problemas mais famosos envolvendo grafos hamiltonianos é o Problema</p><p>do Caixeiro Viajante, do inglês Traveling Salesman Problem.</p><p>O dilema é enunciado como uma pessoa que precisa visitar várias cidades para</p><p>efetuar as suas vendas. Conectando as cidades, tem-se estradas ou rodovias, aos</p><p>pares, sendo que cada uma conta com uma distância (um peso). O objetivo é visitar</p><p>todos os distritos somente uma vez, fazendo o percurso mais curto e retornando à</p><p>cidade de origem.</p><p>Representar essa questão na teoria dos grafos é simples. Cada cidade é um vér-</p><p>tice e cada rodovia uma aresta ponderada com sua distância. Se houver estradas</p><p>entre todas as cidades, o grafo é completo. Assumindo que o custo de um caminho/</p><p>ciclo é a soma dos pesos de suas arestas, a solução do problema é encontrar um</p><p>ciclo hamiltoniano que tenha a menor despesa.</p><p>Por exemplo, considerando quatro cidades do estado de Santa Catarina:</p><p>Joaçaba, Treze Tílias, Videira e Campos Novos, a representação em forma de grafo</p><p>pode ser vista na Figura 17, indicando os vértices como cidades, as arestas como</p><p>estradas e as distâncias como o peso de cada aresta.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 17</p><p>Cidades de Santa Catarina</p><p>v2</p><p>v1</p><p>v3</p><p>v4</p><p>34 km</p><p>38 km</p><p>64 km</p><p>66 km</p><p>78 km</p><p>45 km</p><p>Treze Tílias</p><p>Videira</p><p>Joaçaba</p><p>Campos Novos</p><p>92 Teoria dos Grafos</p><p>Constatando que o número de vértices é igual a 4, tem-se 6 possíveis ciclos, partin-</p><p>do de Joaçaba e retornando a Joaçaba, passando por todos os vértices somente uma</p><p>vez, a saber:</p><p>• Joaçaba → Campos Novos → Videira → Treze Tílias → Joaçaba : 183 km</p><p>• Joaçaba → Campos Novos → Treze Tílias → Videira → Joaçaba : 221 km</p><p>• Joaçaba → Videira → Campos Novos → Treze Tílias → Joaçaba : 246 km</p><p>• Joaçaba → Videira → Treze Tílias → Campos Novos → Joaçaba : 221 km</p><p>• Joaçaba → Treze Tílias → Videira → Campos Novos → Joaçaba : 183 km</p><p>• Joaçaba → Treze Tílias → Campos Novos → Videira → Joaçaba : 246 km</p><p>Percebe-se que alguns ciclos são o inverso de outros. De todos eles, dois</p><p>possuem a menor distância, e qualquer um deles é uma solução ao problema</p><p>apresentado.</p><p>Para resolver o dilema, usa-se um método exato. A maneira mais comum é</p><p>enumerar todas as combinações de vértices que formam um ciclo hamiltonia-</p><p>no e escolher a de menor custo. Sua complexidade é fatorial, significando que,</p><p>para muitas cidades, o problema não termina em tempo hábil.</p><p>Outra saída é a aplicação de métodos heurísticos, que podem não resul-</p><p>tar exatamente o ciclo de menor custo, mas que chegam a uma boa solução,</p><p>terminando o processo em tempo hábil. Os métodos heurísticos demandam</p><p>técnicas aplicadas em inteligência artificial, como algoritmos genéticos, buscas</p><p>heurísticas, entre outros (SOUZA, 2015).</p><p>Há também o método da busca gulosa, um algoritmo não exato, em que,</p><p>dado um vértice</p><p>de partida, é sempre escolhida a aresta de menor custo para</p><p>atravessar. Esse processo é repetido sucessivamente até que todos os vértices</p><p>tenham sido alcançados e que a única opção seja retornar ao vértice origem</p><p>(LOPES, 2020).</p><p>Pelo algoritmo guloso (Figura 17), partindo de Joaçaba, a primeira escolha</p><p>seria Treze Tílias, que possui a menor distância (38 km). De Treze Tílias, o</p><p>algoritmo escolheria Videira (34 km). De Videira, a única opção seria Campos</p><p>Novos, visto que não se pode voltar a Treze Tílias nem chegar a Joaçaba (final</p><p>do ciclo). De Campos Novos, voltar a Joaçaba, resultando o seguinte caminho:</p><p>• Joaçaba → Treze Tílias → Videira → Campos Novos → Joaçaba : 183 km</p><p>Coincidentemente é o caminho ideal.</p><p>Agora, em um segundo exemplo, considerando o grafo da Figura 18, o qual</p><p>contém cinco vértices, percebe-se que trata-se de um grafo completo (todos</p><p>os vértices são adjacentes a todos os demais) e que, portanto, possui (n-1)!</p><p>ciclos hamiltonianos iniciando em v1, no caso, 24. Enumerando todos os ciclos</p><p>Grafos eulerianos e hamiltonianos 93</p><p>hamiltonianos, é possível perceber que o menor custo é 676, com o seguinte</p><p>caminho:</p><p>• v1 → v4 → v2 → v3 → v5 → v1</p><p>Figura 18</p><p>Grafo com ciclos hamiltonianos</p><p>133</p><p>185</p><p>119</p><p>121</p><p>150</p><p>152</p><p>120</p><p>199</p><p>174</p><p>200</p><p>v2</p><p>v1</p><p>v3</p><p>v4</p><p>v5</p><p>Fonte: Adaptada de Lopes, 2020.</p><p>Aplicando o algoritmo guloso, partindo de v1, as escolhas feitas seriam de:</p><p>• v1 para v3: custo 119</p><p>• v3 para v5: custo 120</p><p>• v5 para v4: custo 199</p><p>• v4 para v2: custo 150</p><p>• v2 para v1: custo 185</p><p>Resultando um custo total de 773, o que não é o menor custo, conforme calcu-</p><p>lado anteriormente (676).</p><p>Mesmo não sendo o melhor custo, o encontrado pelo método guloso é bem</p><p>próximo do melhor custo. Isso deve ser levado em consideração, uma vez que o</p><p>tempo para se chegar ao caminho pode ser bem maior pelo método exato.</p><p>Uma variação desse algoritmo é o método guloso com repetição, podendo ser</p><p>implementado repetindo o algoritmo guloso, partindo de cada vértice, e, ao final,</p><p>escolhendo o ciclo de menor caminho. No caso da Figura 18, seriam calculado cinco</p><p>ciclos, cada um iniciando em um vértice diferente:</p><p>94 Teoria dos Grafos</p><p>• v1 → v3 → v5 → v4 → v2 → v1: custo 773</p><p>• v2 → v3 → v1 → v5 → v4 → v2: custo 722</p><p>• v3 → v1 → v5 → v4 → v2 → v3: custo 722</p><p>• v4 → v2 → v3 → v1 → v5 → v4: custo 722</p><p>• v5 → v3 → v1 → v4 → v2 → v5: custo 741</p><p>Assim, o ciclo escolhido seria:</p><p>• v2 → v3 → v1 → v5 → v4 → v2</p><p>Como é um ciclo, deslocando-o para que v1 seja o ponto de partida, tem-se:</p><p>• v1 → v5 → v4 → v2 → v3 → v1</p><p>Não é o ciclo ideal, mas está mais perto, sendo, portanto, uma solução satisfató-</p><p>ria que pode ser calculada em tempo hábil.</p><p>A formulação de problemas com base em grafos hamiltonianos é ampla, con-</p><p>siderando a dificuldade computacional em se encontrar ciclos hamiltonianos, es-</p><p>pecialmente em grafos ponderados. Muitas pesquisas são feitas na área, tendo</p><p>como objetivo a descoberta de novas técnicas para minimizar os efeitos da explo-</p><p>são combinatória.</p><p>CONSIDERAÇÕES FINAIS</p><p>Neste capítulo, estudou-se os grafos eulerianos e hamiltonianos. Foram mostrados</p><p>teoremas que impõem as condições necessárias e suficientes para que um grafo seja</p><p>euleriano, assim como os algoritmos de Hierholzer e Fleury, para encontrar um ciclo</p><p>euleriano em um grafo euleriano.</p><p>Para os grafos hamiltonianos, foi apresentado que não há teoremas que impõem</p><p>condições necessárias e suficientes, já que os teoremas de Dirac e Ore têm condições</p><p>suficientes, apenas.</p><p>Quando o problema de busca pelo ciclo hamiltoniano envolve pesos e tem como</p><p>objetivo um ciclo ótimo partindo de um determinado vértice, verificou-se que a explo-</p><p>são combinatória é da ordem de (n-1)!, sendo n o número de vértices do grafo. Perce-</p><p>be-se, portanto, que um método exato se torna inviável rapidamente, não terminando</p><p>de executá-lo em tempo hábil.</p><p>Os métodos heurísticos que envolvem técnicas de inteligência artificial são os mais</p><p>indicados. Eles não retornam a solução de menor custo, mas uma com um custo satis-</p><p>fatório e em tempo factível.</p><p>ATIVIDADES</p><p>1. Uma expedição para a exploração das luas de Saturno e Júpiter será lançada,</p><p>passando por Calisto, Ganímedes, Io, Mimas e Titã. Após visitar essas luas, a nave</p><p>deve retornar à Terra. O diagrama a seguir apresenta a duração da missão, em</p><p>anos, estimada para a viagem entre cada par de luas. Qual seria o melhor caminho</p><p>para tal expedição?</p><p>Grafos eulerianos e hamiltonianos 95</p><p>Para a resolução deste problema, utilize o algoritmo guloso.</p><p>0,8</p><p>5,1</p><p>4,7</p><p>5,7</p><p>Io Mimas</p><p>Titã</p><p>TerraGanímedes</p><p>Calisto</p><p>5,6</p><p>5,9</p><p>3,2</p><p>3,1</p><p>3,6</p><p>8,2</p><p>8,1</p><p>0,6</p><p>5,2</p><p>1,5</p><p>1,1</p><p>v2 v1</p><p>v3</p><p>v4 v5</p><p>v6</p><p>2. Resolva a Questão 1 pelo algoritmo guloso com repetição. Mostre todos os</p><p>caminhos analisados, o tempo de cada caminho, e escolha que der o menor</p><p>resultado, rearranjado para iniciar na Terra (se for o caso).</p><p>3. Dado o grafo a seguir, apresente um ciclo euleriano partindo de v1.</p><p>v1 v8</p><p>v2</p><p>v7v3</p><p>v4 v5 v6</p><p>4. Considerando o grafo simples G = (V, A), tal que |V| = 6 e ∀v ∈ V grau(v) = 3, prove</p><p>que G é hamiltoniano.</p><p>96 Teoria dos Grafos</p><p>5. Seja o grafo simples G = (V, A), tal que |V| = 7, os seus vértices possuem os seguintes</p><p>graus:</p><p>• grau(v1) = 3</p><p>• grau(v2) = 1</p><p>• grau(v3) = 4</p><p>• grau(v4) = 2</p><p>• grau(v5) = 2</p><p>• grau(v6) = 2</p><p>• grau(v7) = 2</p><p>Esse grafo é euleriano? Justifique a sua resposta.</p><p>REFERÊNCIAS</p><p>BOAVENTURA NETTO, P. O. Grafos: teoria, modelos, algoritmos. 3. ed. São Paulo: Blucher, 2003.</p><p>FERNANDO, P. H. L. et al. O problema do caixeiro viajante aplicado na distribuição de peças/componentes do</p><p>almoxarifado para a montagem de caminhões especiais em uma linha de produção na indústria automobilística.</p><p>Sinergia (IFSP Online), São Paulo, v. 20, n. 1, p. 63-74, jan./mar. 2019. Disponível em: https://www.researchgate.</p><p>net/publication/332665441_O_PROBLEMA_DO_CAIXEIRO_VIAJANTE_APLICADO_NA_DISTRIBUICAO_DE_</p><p>PECASCOMPONENTES_DO_ALMOXARIFADO_PARA_A_MONTAGEM_DE_CAMINHOES_ESPECIAIS_EM_UMA_</p><p>LINHA_DE_PRODUCAO_NA_INDUSTRIA_AUTOMOBILISTICA/link/5cc259694585156cd7b18368/download.</p><p>Acesso em: 6 jul. 2020.</p><p>GOLDBARG, M. C.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. Rio de Janeiro: Elsevier, 2012.</p><p>GOMES, M. J. N. et al. O problema do carteiro chinês, algoritmos exatos e um ambiente MVI para análise de</p><p>suas instâncias: sistema XNÊS. Pesquisa Operacional, Rio de Janeiro, v. 29, n. 2, p. 323-363, jan./maio/ago. 2009.</p><p>Disponível em: http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0101-74382009000200005&lng=en&</p><p>nrm=iso. Acesso em: 6 jul. 2020.</p><p>LOPES, S. A. Métodos Finitos em Matemática. Arquivo Escolar, 28 mar. 2011. Disponível em: http://</p><p>arquivoescolar.org/handle/arquivo-e/45. Acesso em: 6 jul. 2020.</p><p>NICOLETTI, M. C. do.; HRUSCHKA JUNIOR, E. R. Fundamentos da teoria dos grafos para computação. São Paulo:</p><p>LTC, 2018.</p><p>SOUZA, M. M. Heurísticas para o problema do caixeiro viajante com seleção de hotéis. Viçosa, 2015. Dissertação</p><p>(Mestrado em Ciência da Computação) – Universidade Federal de Viçosa. Disponível em: https://www.</p><p>locus.ufv.br/bitstream/handle/123456789/6650/texto%20completo.pdf?sequence=1&isAllowed=y.</p><p>Acesso em: 6 jul. 2020.</p><p>SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.</p><p>Problemas em Grafos 97</p><p>5</p><p>Problemas em Grafos</p><p>O estudo de teoria de grafos é muito amplo e vários problemas surgem</p><p>da análise destas estruturas matemáticas. Nesse sentido, serão abordados</p><p>neste capítulo alguns problemas em grafos, como as cliques e os conjuntos</p><p>estáveis, as cliques máximas, as coberturas, a planaridade e a coloração. Na</p><p>seção 5.1 serão apresentados os conceitos de clique em grafos e seu com-</p><p>plementar, os conjuntos estáveis. Na seção 5.2 será desenvolvido o concei-</p><p>to de clique máxima, problema de solução difícil (NP-Completo). Em seguida,</p><p>na seção 5.3, serão abordadas as coberturas de vértices e coberturas de</p><p>arestas. O problema da planaridade de grafos também é estudado. Por fim,</p><p>na seção 5.5, será exposto o problema da coloração</p><p>em grafos.</p><p>5.1 Cliques e Conjuntos Estáveis</p><p>Vídeo Imagine uma empresa que, preocupada com a divulgação de seus produtos,</p><p>mas com poucos recursos, decide investir em marketing digital em redes sociais.</p><p>Levando em consideração um orçamento pequeno, o gerente de marketing quer</p><p>divulgar para pessoas ou para empresas que possam ajudar na propagação para</p><p>um conjunto bem conectado de contatos, o qual ele chamou de panelinha. Para</p><p>otimizar seus gastos, o gerente não quer compartilhar sua divulgação com mais de</p><p>um contato de uma mesma panelinha.</p><p>A Figura 1 a seguir pode ser utilizada para esquematizar essa estratégia de mar-</p><p>keting. Com anúncios em apenas quatro dessas panelinhas, o gerente de marketing</p><p>teoricamente conseguiria uma divulgação para 100 pessoas.</p><p>Figura 1</p><p>Panelinhas</p><p>Fonte: Elaborada pelo autor.</p><p>Panelinha 1</p><p>Empresa</p><p>Panelinha 2</p><p>Panelinha 3</p><p>Panelinha 4</p><p>98 Teoria dos Grafos</p><p>Modelando este problema para grafos, em que cada pessoa é um vértice e cada</p><p>conexão uma aresta, percebe-se que grupos altamente conectados são subgrafos</p><p>completos do grafo total, isto é, dentro de cada panelinha todas as pessoas estão</p><p>conectadas entre si. Tomando cada panelinha como um grafo individual, diz-se que</p><p>é um grafo completo.</p><p>Dado um grafo não orientado denotado por G = (V, A), uma clique é um subcon-</p><p>junto de vértices de G, em que todos os seus vértices são conectados dois a dois.</p><p>Em outras palavras, uma clique V’ de G é tal que V’ ⊂ V e ∀v, w ∈ V’, assim como v ≠</p><p>w e (v, w) ∈ A.</p><p>Apesar de a definição indicar um subconjunto de vértices, muitos autores tam-</p><p>bém definem o termo clique como um subgrafo e, nesse caso, uma clique é um</p><p>subgrafo completo de G. Outra maneira de indicar a clique é definindo-a como um</p><p>subgrafo isomorfo a um grafo completo Kn.</p><p>Percebe-se que o conceito é parecido com o de grafos completos, podendo ser</p><p>assim designado quando todos os seus vértices são conectados dois a dois. Os</p><p>grafos completos possuem uma notação própria, a saber Kn, em que n é o número</p><p>de vértices. Assim, a Figura 2 apresenta os grafos K2, K3, K4 e K5 respectivamente</p><p>(lembrando que K1 é um grafo completo contendo somente um vértice).</p><p>v5v4</p><p>v1 v3</p><p>v2</p><p>v1 v2</p><p>v3v4</p><p>v1 v3</p><p>v2v2</p><p>v1</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 2</p><p>Grafos Completos: K2, K3, K4 e K5</p><p>Assim, um grafo possui uma clique se possuir um subgrafo completo, por exem-</p><p>plo, o grafo G apresentado na Figura 3.</p><p>Nesse grafo podem-se observar as seguintes cliques:</p><p>• {v1}</p><p>• {v2}</p><p>• {v3}</p><p>• {v4}</p><p>• {v5}</p><p>• {v1, v2}</p><p>• {v2, v3}</p><p>• {v3, v4}</p><p>• {v4, v5}</p><p>• {v1, v5}</p><p>• {v2, v4}</p><p>• {v2, v3, v4}</p><p>Foi no trabalho de Luce e Perry</p><p>(1949) que a palavra clique foi</p><p>utilizada pela primeira vez para</p><p>representar um subgrafo completo,</p><p>denotando um grupo de pessoas</p><p>que se conhecem em uma rede</p><p>social. Essa palavra, portanto, foi</p><p>usada para designar um grupo de</p><p>pessoas, uma panelinha e não diz</p><p>respeito ao ato de clicar.</p><p>Curiosidade</p><p>Fonte: Elaborada pelo autor.</p><p>v5</p><p>v2 v4</p><p>v3</p><p>v1</p><p>Figura 3</p><p>Grafo G contendo cliques</p><p>Problemas em Grafos 99</p><p>As cliques {v1, v5}, {v3, v4} e {v2, v3, v4} podem ser visualizadas de acordo com a</p><p>Figura 4.</p><p>Figura 4</p><p>Grafo com algumas cliques destacadas</p><p>Fonte: Elaborada pelo autor.</p><p>v5</p><p>v2 v4</p><p>v3</p><p>v1</p><p>Isolando essas cliques como subgrafos induzidos de G, conforme a Figura 5, per-</p><p>cebe-se que cada uma delas é um subgrafo completo de G, sendo respectivamente</p><p>K2, K2 e K3.</p><p>v4</p><p>v3</p><p>v2v4</p><p>v3</p><p>v5v1</p><p>Figura 5</p><p>Cliques de G separadas</p><p>Fonte: Elaborada pelo autor.</p><p>Define-se como tamanho de uma clique, ou sua cardinalidade, o</p><p>número de vértices em cada; sendo C uma clique, |C| é a sua cardi-</p><p>nalidade. Para as cliques da Figura 5, seus tamanhos são dois, dois</p><p>e três, respectivamente. Por exemplo, seja o grafo H da Figura 6,</p><p>consegue-se observar duas cliques de tamanho três, a saber:</p><p>• {v1, v5, v6}</p><p>• {v2, v3, v4}</p><p>Seus subgrafos induzidos podem ser vistos na Figura 7.</p><p>Fonte: Elaborada pelo autor.</p><p>v2</p><p>v4</p><p>v3</p><p>v6</p><p>v5</p><p>v1</p><p>Figura 7</p><p>Cliques de tamanho 3 do Grafo H</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v5</p><p>v2</p><p>v4</p><p>v3</p><p>v1</p><p>Figura 6</p><p>Grafo H</p><p>100 Teoria dos Grafos</p><p>Partindo do conceito de clique, chama-se conjunto independente de vértices, tam-</p><p>bém conhecido como conjunto estável de vértices, o conjunto de vértices totalmente</p><p>desconexo, sem arestas entre eles. Isto é, um conjunto independente de vérti-</p><p>ces S de G é tal que S ⊂ V e ∀v, w ∈ S, para v ≠ w e (v, w) ∉ A.</p><p>Dado o grafo da Figura 8, é possível obter os seguintes conjuntos independen-</p><p>tes de vértices:</p><p>• {v1, v4}</p><p>• {v1, v3}</p><p>• {v1, v5}</p><p>• {v2, v4}</p><p>• {v3, v5}</p><p>• {v1, v3, v5}</p><p>Na Figura 9 consegue-se observar os conjuntos {v1, v4}, {v3, v5} e</p><p>{v1, v3, v5}. Percebe-se que, para cada um desses conjuntos, não há</p><p>arestas para qualquer par de vértices.</p><p>Define-se como tamanho de um conjunto independente de vértices</p><p>o seu número de vértices. Para os conjuntos mostrados na Figura 8,</p><p>os tamanhos são: dois, dois e três, respectivamente.</p><p>Um conjunto independente, ou estável de vértices, é máximo se</p><p>tiver a maior cardinalidade entre todos os conjuntos estáveis do gra-</p><p>fo. Outro conceito é o número ou índice de estabilidade do grafo, dado</p><p>pela cardinalidade de um conjunto estável máximo do grafo. Dado</p><p>um grafo G, esse índice é denotado por α(G).</p><p>Assim, os conceitos de clique e conjunto independente de vérti-</p><p>ces são complementares. Enquanto no primeiro há uma aresta en-</p><p>tre todos os pares de vértices, no segundo não há. Isso significa que um conjunto</p><p>vértices E é estável em um grafo G, se, e somente se, for uma clique no grafo com-</p><p>plementar de G. Seja o grafo J apresentado na Figura 9.</p><p>v5</p><p>v3</p><p>v1</p><p>v4</p><p>v1 v5</p><p>v3</p><p>Figura 9</p><p>Conjuntos independentes de vértices de G: {v1, v4}, {v3, v5} e {v1, v3, v5}</p><p>Fonte: Elaborada pelo autor.</p><p>O conjunto de vértices {v1, v3, v5} é um conjunto estável de vértices de J, pois, no</p><p>grafo complementar exibido na Figura 10, {v1, v3, v5} é uma clique.</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5 v3</p><p>v1</p><p>v2</p><p>Figura 8</p><p>Grafo J</p><p>Problemas em Grafos 101</p><p>Um conceito correlato ao conjunto independente de vértices é o</p><p>emparelhamento – matching, ou também acoplamento. Um empare-</p><p>lhamento de um grafo G é um conjunto de arestas que não compar-</p><p>tilham vértices.</p><p>A Figura 11 apresenta um grafo contendo um emparelhamento,</p><p>sendo o conjunto de arestas {(v1, v2) e (v4, v5)}. Perceba que essas</p><p>arestas não compartilham vértices.</p><p>Um emparelhamento máximo é aquele que contém o maior</p><p>número de arestas possível. Encontrar um emparelhamento máxi-</p><p>mo pode ser feito em tempo polinomial e tem-se vários algoritmos</p><p>eficientes desenvolvidos (SZWARCFITER; FIGUEIREDO, 1999).</p><p>As aplicações do estudo das cliques extrapolam a área da com-</p><p>putação e da matemática. Por exemplo, o trabalho de Rhodes et al.</p><p>(2003), na área da química, mapeou o problema de similaridade de</p><p>farmacóforos em um banco de dados como um problema de detec-</p><p>ção de cliques. Os farmacóforos são um conjunto de características</p><p>que asseguram interações moleculares e esse estudo é importante</p><p>para o desenvolvimento de moléculas bioativas (RHODES et al., 2003).</p><p>A aplicação de emparelhamentos também é ampla; um exemplo</p><p>é o problema da atribuição de pessoal (SZWARCFITER; FIGUEIREDO,</p><p>1999). Suponha uma possível contratação de candidatos a vagas em</p><p>uma empresa, há n candidatos e m posições disponíveis. Cada can-</p><p>didato está qualificado a uma ou mais posições. O problema é des-</p><p>cobrir se há uma forma de alocar todos os candidatos de modo que</p><p>cada um ocupe uma posição. Para uma resolução provável, é possí-</p><p>vel realizar o emparelhamento em grafos bipartidos.</p><p>Fonte: Elaborada pelo autor.</p><p>v5</p><p>v2 v4</p><p>v3</p><p>v1</p><p>Figura 11</p><p>Grafo com emparelhamento</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5 v3</p><p>v1</p><p>v2</p><p>Figura 10</p><p>Grafo complementar a J</p><p>5.2 Cliques Máximas</p><p>Vídeo Dando continuidade ao estudo das cliques, existem dois conceitos importantes</p><p>na área de grafos que devem ser levados em consideração: a clique maximal e a</p><p>clique máxima.</p><p>Uma clique maximal é um conjunto de vértices</p><p>todos adjacentes entre si</p><p>e que não está estritamen-</p><p>te contida em outra clique (GOLDBARG; GOLDBARG,</p><p>2012). Isso significa que, tomada uma clique C de um</p><p>grafo, se houver possibilidade de adicionar mais um</p><p>vértice adjacente a todos os demais, formando um</p><p>subgrafo completo e, portanto, outra clique C’, a cli-</p><p>que C não é maximal. Por exemplo, veja o grafo H da</p><p>Figura 12.</p><p>v1 v5</p><p>v4</p><p>v3</p><p>v6</p><p>v2</p><p>Figura 12</p><p>Grafo H</p><p>Fonte: Elaborada pelo autor.</p><p>102 Teoria dos Grafos</p><p>Observe a clique C formada pelos vértices { v1, v2, v4 }, a qual pode</p><p>ser visualizada por arestas tracejadas na Figura 13 a seguir.</p><p>Se houver possibilidade de adicionar mais um vértice à clique C,</p><p>de maneira que esse vértice seja adjacente a todos os elementos de</p><p>C, então, C não é uma clique maximal. Analisando o grafo da Figura</p><p>13, percebe-se que v3 e v6 não são adjacentes a todos os vértices de</p><p>C, mas v5, sim. O vértice v5 é adjacente a v1, v2 e v4 , portanto, a clique</p><p>C não é maximal, pois está contida em C’ = { v1, v2, v4, v5 }, conforme</p><p>mostra a Figura 14.</p><p>Analisando os demais vértices, v3 não é adjacente a todos os vér-</p><p>tices em C’, assim como v6. Portanto, C’ é uma clique maximal do</p><p>grafo H e pode ser visualizada na Figura 15.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 14</p><p>Clique C’ do Grafo H</p><p>v1 v5</p><p>v4</p><p>v3</p><p>v6</p><p>v2</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 15</p><p>Clique Maximal C’ do Grafo H</p><p>v1 v5</p><p>v4v2</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 13</p><p>Clique C no Grafo H</p><p>v1 v5</p><p>v4</p><p>v3</p><p>v6</p><p>v2</p><p>Convém ressaltar que podem haver mais cliques maximais em um grafo. A</p><p>exemplo de H, a clique C’’= {v1, v2, v5, v6} também é maximal e pode ser observada</p><p>na Figura 16.</p><p>Tomando novamente o grafo H de exemplo, a clique C’’’ = { v2, v3, v4 }, mostrada</p><p>na Figura 17, também é maximal, apesar de possuir menos vértices que C’ e C’’.</p><p>Isso porque uma clique é maximal se ela não está contida em outra clique e não há</p><p>relação com outras cliques que podem ser encontradas no grafo.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 16</p><p>Clique maximal C’’ do Grafo H</p><p>v1 v5</p><p>v4</p><p>v6</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 17</p><p>Clique Maximal C’’’ do Grafo H</p><p>v4</p><p>v3</p><p>v2</p><p>Problemas em Grafos 103</p><p>Há outro conceito básico em grafos, usado para denotar a maior clique que</p><p>pode ser encontrada em um grafo, que é a clique máxima.</p><p>Uma clique máxima é uma clique de maior cardinalidade, isto é, a que possui</p><p>o maior número de vértices entre todas as possíveis cliques do grafo (GOLDBARG;</p><p>GOLDBARG, 2012).</p><p>Dado um grafo G = (V, A), o conjunto de todas as cliques de G é denotado por</p><p>C(G). O tamanho da clique máxima, também chamado de número de clique, é dado</p><p>por ω(G) = max { |C| | C ∈ C(G)}.</p><p>Observe o grafo I = (V, A), apresentado na Figura 18.</p><p>v1</p><p>v5</p><p>v4</p><p>v3</p><p>v6</p><p>v2</p><p>Figura 18</p><p>Grafo I</p><p>Fonte: Elaborada pelo autor.</p><p>A Figura 19 apresenta todas as cliques maximais de I. Não serão enumeradas</p><p>todas as cliques, já que seria necessário acrescentar todos os pares de vértices</p><p>adjacentes, pois são cliques de tamanho 2.</p><p>v1</p><p>v6</p><p>v1</p><p>v5</p><p>v4</p><p>v4</p><p>v3</p><p>v2</p><p>v1</p><p>v4</p><p>v2</p><p>Figura 19</p><p>Cliques Maximais de I</p><p>Fonte: Elaborada pelo autor.</p><p>Assim, o grafo I possui três cliques máximas, a saber:</p><p>• { v1, v2, v4 }</p><p>• { v2, v3, v4 }</p><p>• { v1, v4, v5 }</p><p>Assim, ω(I) = 3</p><p>O Problema da Clique é um problema de decisão, em que, dados um grafo G e</p><p>um número inteiro k, deve-se decidir se G tem uma clique de tamanho pelo menos k.</p><p>Esse problema é da classe NP-completo e faz parte da clássica lista de Karp, conten-</p><p>do 21 problemas provados como NP-completos.</p><p>Em seu artigo, Richard Karp (apud</p><p>MILLER; THATCHER; BOHLINGER,</p><p>1972) demonstrou que 21</p><p>problemas famosos da ciência da</p><p>computação são NP-completos,</p><p>usando como base a prova feita</p><p>em 1971, por Stephen Cook, o</p><p>qual constatou que o problema</p><p>da Satisfatibilidade Booleana</p><p>é NP-Completo. O trabalho de</p><p>Karp impulsionou os estudos em</p><p>complexidade computacional,</p><p>principalmente se voltando ao</p><p>grande problema não resolvido até</p><p>hoje: P = NP?</p><p>Curiosidade</p><p>104 Teoria dos Grafos</p><p>Assim, uma solução exata para o problema da clique é exponencial. Pesqui-</p><p>sas atuais tentam diminuir sua ordem de complexidade pelo refinamento de</p><p>algoritmos clássicos, como branch-and-bound, técnica baseada na enumeração de</p><p>todas as possíveis cliques máximas, descartando aquelas que não satisfazem de-</p><p>terminados limites impostos pelo algoritmo (ZUGE, 2017).</p><p>5.3 Coberturas</p><p>Vídeo Suponha que há um projeto municipal para instalar câmeras de monitoramento</p><p>de tráfego em ruas e avenidas de determinada cidade. Um dos objetivos é que os</p><p>motoristas, ao trafegarem pelo município, sempre passem por uma câmera. En-</p><p>tretanto, como o orçamento é um problema em qualquer administração, deve-se</p><p>gastar o mínimo possível, instalando o menor número de câmeras.</p><p>Modelando esse problema como um grafo, consegue-se representar as ruas</p><p>pelas arestas e os cruzamentos pelos vértices. O objetivo é encontrar o menor nú-</p><p>mero de vértices, de modo que todas as arestas desse grafo estejam conectadas a</p><p>um vértice desse conjunto. Assim, instalam-se as câmeras nesses cruzamentos.</p><p>Dado um grafo não orientado G = (V, A), um conjunto de</p><p>vértices S é chamado de cobertura de vértices de G se toda</p><p>aresta de G é incidente a pelo menos um vértice de S. Isto é,</p><p>S ⊆ V, tal que se (v, w) ∈ A, então, ou v ∈ S, ou w ∈ S (ou</p><p>ambos). Diz-se que S cobre as arestas de G (NICOLETTI;</p><p>HRUSCHKA, 2018).</p><p>Observe o grafo da Figura 20: os conjuntos de vértices</p><p>V’ = {v1, v3, v4, v5, v6} e V’’ = {v2, v4, v5} são coberturas de vértices.</p><p>Os dois conjuntos podem ser vistos na Figura 21, em</p><p>que os vértices das coberturas V’ e V’’, respectivamente,</p><p>estão representados normalmente e os vértices desconsi-</p><p>derados estão representados em branco. Percebe-se que</p><p>todas as arestas possuem, pelo menos, uma ponta em um</p><p>vértice da cobertura.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 21</p><p>Representação das coberturas de Vértices V’ e V’’, respectivamente</p><p>v1 v5</p><p>v4</p><p>v3</p><p>v6</p><p>v5</p><p>v4v2</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 20</p><p>Grafo G</p><p>v1 v5</p><p>v4</p><p>v3</p><p>v6</p><p>v2</p><p>Problemas em Grafos 105</p><p>O número de cobertura de vértices de um grafo G é denotado τ(G) e é a car-</p><p>dinalidade da menor cobertura de vértices de G. Assim, no exemplo do grafo da Fi-</p><p>gura 20, o número de cobertura de vértices seria τ(G) = 3, pois não há um conjunto</p><p>de menos de três vértices que cubra as arestas de G.</p><p>Um conceito análogo à cobertura de vértices é a cobertura de arestas. Dado um</p><p>grafo G = (V, A), um conjunto C de arestas é chamado de cobertura de arestas, se</p><p>todo vértice de G for extremidade de, pelo menos, uma aresta de C. Ou seja, C ⊆ A,</p><p>tal que ∀v ∈ V e ∃w ∈ V e (v, w) ∈ C. Diz-se que C cobre os vértices de G.</p><p>Considerando o grafo G da Figura 20, os conjuntos de arestas A’ = { (v3, v5), (v2, v4),</p><p>(v1, v4), (v5, v6) } e A’’ = { (v1, v4), (v2, v6), (v3, v5) } são coberturas de arestas. Esses dois</p><p>conjuntos podem ser vistos na Figura 22, em que as arestas das coberturas A’ e A’’,</p><p>respectivamente, estão representados normalmente e as arestas desconsideradas</p><p>estão representadas em tracejado. Percebe-se que todos os vértices são atingidos</p><p>por, no mínimo, uma aresta das coberturas.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 22</p><p>Representação das Coberturas e Arestas A’ e A’’, respectivamente.</p><p>v1 v5</p><p>v4v2</p><p>v3</p><p>v6</p><p>v1 v5</p><p>v4v2</p><p>v3</p><p>v6</p><p>O número de cobertura de arestas de um grafo G é denotado ξ(G), que é a cardi-</p><p>nalidade da menor cobertura de arestas de G. Assim, para o grafo da Figura 20, ξ(G) = 3,</p><p>pois não há como cobrir todos os vértices do grafo com menos de três arestas.</p><p>O problema da cobertura de vértices mínima é um problema de otimização.</p><p>Seu objetivo é encontrar uma cobertura de vértices com o menor número de vérti-</p><p>ces possível e sua formulação como um problema de decisão também é um dos 21</p><p>problemas NP-Completos de Karp.</p><p>O problema da cobertura de arestas mínima é um problema de otimização e</p><p>tem como objetivo encontrar uma cobertura de arestas com o menor número de</p><p>arestas possível. Ao contrário do problema de cobertura de vértices mínima, esse é</p><p>um problema polinomial, isto</p><p>é, um problema tratável.</p><p>Para resolver o problema da cobertura de vértices mínima, não se pode usar um</p><p>algoritmo fundado em força bruta (enumerando todas as possíveis coberturas e</p><p>testá-las), pois já se sabe que o tempo de execução é exponencial em relação ao ta-</p><p>manho do grafo. Assim, algoritmos que retornam uma solução aproximada precisam</p><p>ser empregados, não retornando a uma solução ótima, mas uma solução satisfatória.</p><p>Um problema de decisão,</p><p>conforme o apresentado para a</p><p>cobertura de vértices, é formulado</p><p>com um enunciado, para o qual se</p><p>deseja uma resposta sim ou não.</p><p>No caso, a versão do problema é</p><p>a seguinte:</p><p>Dado o grafo G e um valor</p><p>inteiro positivo k, G contém uma</p><p>cobertura de vértices de tamanho,</p><p>no máximo, k?</p><p>Formulado dessa forma, o proble-</p><p>ma faz parte dos 21 problemas</p><p>NP-Completos de Karp.</p><p>Saiba mais</p><p>Segundo Gersting e Iório (2012),</p><p>um problema é tratável quando</p><p>há um algoritmo que o resolve</p><p>em um tempo proporcional a</p><p>um polinômio do tamanho de</p><p>sua entrada. Esses problemas</p><p>estão na classe de complexidade</p><p>P, ou seja, os problemas que são</p><p>resolvidos em máquinas de turing</p><p>determinística, em tempo poli-</p><p>nomial, em relação ao tamanho</p><p>da entrada.</p><p>Convém ressaltar que um polinômio</p><p>pode conter qualquer expoente, por</p><p>exemplo: n1560. Isso não deixa de</p><p>torná-lo tratável, mas pode levar</p><p>uma grande quantidade de tempo</p><p>de processamento.</p><p>Já os intratáveis são aqueles cujos</p><p>algoritmos são inerentemente</p><p>ineficientes, com tempo expo-</p><p>nencial ao tamanho da entrada.</p><p>Esses problemas são resolvidos</p><p>por uma máquina de turing não</p><p>determinística em tempo poli-</p><p>nomial, em relação ao tamanho</p><p>da entrada, estando, portanto, na</p><p>classe de complexidade NP.</p><p>Saiba mais</p><p>106 Teoria dos Grafos</p><p>Já o problema da cobertura de arestas mínima pode ser resolvido de uma ma-</p><p>neira ótima, encontrando um emparelhamento máximo, ou seja, um conjunto in-</p><p>dependente de arestas que não compartilham vértices e aplicando um algoritmo</p><p>guloso para agregar todos os vértices.</p><p>5.4 Planaridade</p><p>Vídeo Um grafo é planar se sua representação gráfica em um plano pode ser feita</p><p>sem que suas arestas se cruzem (SZWARCFITER, 2018).</p><p>Tome como exemplo o grafo apresentado na Figura 23. Apesar da sua represen-</p><p>tação na Figura 23 apresentar intersecção nas arestas (v2, v3) com (v1, v5) e, também,</p><p>(v3, v4) com (v1, v5), o grafo G pode ser representado graficamente de outra forma,</p><p>como mostra a Figura 24. Portanto, o grafo é planar.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 23</p><p>Grafo G com interseções em arestas</p><p>v1 v5</p><p>v4v2</p><p>v3</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 24</p><p>Grafo G com interseções em arestas</p><p>v1 v5</p><p>v4v2</p><p>v3</p><p>Uma das motivações do estudo de planaridade de grafos veio do problema das</p><p>três casas, enunciado pelo matemático inglês Henry Ernest Dudeney (1857-1930)</p><p>em 1913 (SANTOS, 2017).</p><p>Nesse problema, três companhias de fornecimento de serviços públicos devem</p><p>servir três casas distintas. Todas devem usar tubulações subterrâneas na mesma</p><p>profundidade do solo, por questões de segurança. Representado como um gra-</p><p>fo, pode-se observar seis vértices e nove arestas. O problema é descobrir se há a</p><p>possibilidade de suprir todos os serviços, sem que as linhas se cruzem.</p><p>A Figura 25 a seguir ilustra este problema.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 25</p><p>Problema das três casas</p><p>v4 v5 v6</p><p>v2 v3v1</p><p>Companhia</p><p>Luz</p><p>Casa 1</p><p>Companhia</p><p>Água</p><p>Casa 2</p><p>Companhia</p><p>Telefone</p><p>Casa 3</p><p>Problemas em Grafos 107</p><p>Ao ser enunciado como um problema de grafos, percebe-se que o problema das</p><p>três casas pode ser representado pelo grafo bipartido completo K3,3. Para respon-</p><p>der à questão, deve-se descobrir se o K3,3 permite uma representação gráfica em</p><p>que suas arestas não se cruzam, isto é, se ele é planar.</p><p>No problema das três casas, em especial, não há uma forma de</p><p>desenhar o grafo em um plano sem que as arestas se cruzem. Inclu-</p><p>sive, o K3,3 é uma referência para a planaridade, conforme será visto</p><p>no teorema de Kuratowski mais adiante.</p><p>Em grafos planares, as arestas dividem o plano em regiões cha-</p><p>madas de faces. Seja o exemplo do grafo da Figura 26, nesse grafo</p><p>tem-se quatro faces e a face de número quatro é chamada de face</p><p>externa.</p><p>O Teorema a seguir apresenta a Fórmula de Euler que relaciona</p><p>os vértices, arestas e faces em um grafo planar conexo.</p><p>Teorema 1</p><p>Fórmula de Euler (1750)</p><p>Seja um grafo conexo planar G e sejam: n o número de vértices, a o número de</p><p>arestas e f o número de faces, tem-se n – a + f = 2.</p><p>Essa fórmula também pode ser apresentada como n + f = a + 2 e percebe-se,</p><p>facilmente, sua igualdade (SZWARCFITER, 2018). Considerando o grafo da Figura 26,</p><p>pode-se encontrar n = 4, f = 4 e a = 6, então, n + f = a + 2, assim, 4 – 6 + 4 = 2.</p><p>Pela fórmula de Euler, percebe-se que quanto maior for o número de arestas</p><p>em um grafo, relativo ao número de vértices, mais difícil será a obtenção de uma</p><p>representação plana do grafo. Isso é dado por meio do seguinte corolário, que de-</p><p>fine um limite máximo para o número de arestas.</p><p>Corolário 1: seja um grafo planar simples contendo n vértices, n ≥ 3, e a arestas,</p><p>tem-se a ≤ 3n – 6.</p><p>Na prática, isso significa, por exemplo, que em um grafo planar com cinco vér-</p><p>tices há, no máximo, 9 arestas. Deve-se tomar cuidado, pois o Corolário 1 pode ser</p><p>usado para demonstrar que um grafo não é planar, mas, se a condição for satisfei-</p><p>ta, não há garantia de que o grafo é planar.</p><p>Outro exemplo pode ser visto ao considerar o K3,3 (Figura 27), o qual possui 6</p><p>vértices e 9 arestas. Aplicando-se a fórmula do Corolário 1, a condição é satisfeita,</p><p>isto é, 9 ≤ 3*6 – 6, mas o grafo K3,3 não é planar.</p><p>Outro resultado importante advindo do Teorema 5.1 é o corolário a seguir.</p><p>Corolário 2: todo grafo planar simples contém um vértice cujo grau é no máxi-</p><p>mo cinco.</p><p>Esse resultado é muito importante, pois coloca um limite numérico em, pelo</p><p>menos, um dos vértices do grafo planar.</p><p>v4</p><p>v3</p><p>v2</p><p>v1</p><p>2</p><p>3</p><p>4</p><p>1</p><p>Figura 26</p><p>Grafo planar e suas faces</p><p>Fonte: Elaborada pelo autor.</p><p>Lemas, Teoremas e Corolários são</p><p>conceitos são correlatos:</p><p>• Lema: é uma afirmação que</p><p>ajuda a provar um teorema.</p><p>Basicamente, lema é um</p><p>teorema anterior, que ajuda a</p><p>provar outro teorema.</p><p>• Teorema: é uma proposição</p><p>verdadeira, visto que possui</p><p>uma prova</p><p>• Corolário: é uma afirmação,</p><p>uma proposição ou outro teore-</p><p>ma, que pode ser estabelecido</p><p>como consequência de um</p><p>teorema já provado.</p><p>Saiba mais</p><p>108 Teoria dos Grafos</p><p>Outros resultados centrais para o estudo de grafos planares são as provas de</p><p>que K5 e K3,3 não são planares (NICOLETTI; HRUSCHKA, 2018). A Figura 27 apresenta</p><p>as formas mais comuns de representar graficamente K5 e K3,3.</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 27</p><p>Representações de K5 e K3,3</p><p>v4 v5 v6</p><p>v2 v3v1</p><p>K3,3</p><p>K5</p><p>v4 v3</p><p>v2v5</p><p>v1</p><p>Percebe-se que o K3,3 atende ao Corolário 1, ou seja, a = 9, n = 6, portanto,</p><p>9 ≤ 3*6 – 6, isto é 9 ≤ 12. Mesmo assim, K3,3 não é planar.</p><p>Fazem-se necessárias, também, algumas definições em grafos para o estudo de</p><p>grafos planares. Em um grafo G = (V, A), dois vértices, v, w ∈ V, estão em série, se</p><p>existe um vértice x ∈ V, tal que x ≠ v, x ≠ w, grau(x) = 2 e (v, x), (x, w) ∈ A. A Figura 28</p><p>apresenta um grafo cujos vértices v2 e v4 estão em série. Perceba que o vértice v3</p><p>possui grau 2 e é adjacente a v2 e v4, atendendo às condições impostas na definição.</p><p>Dado um grafo G = (V, A) e os dois vértices v, w ∈ V em série, uma redução de</p><p>série é a eliminação do vértice x e a substituição das arestas (v, x) e (x, w) pela</p><p>aresta (v, w). Assim, para o grafo da Figura 28, o grafo da Figura 29 (lado direito) foi</p><p>obtido de uma redução de série, no caso, eliminando-se o vértice v3 e as arestas (v2,</p><p>v3) e (v3, v4), ligando o v2 ao v4 pela aresta (v2, v4).</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 29</p><p>Redução de série</p><p>v1 v5</p><p>v4v2 v3</p><p>v1 v5</p><p>v4v2</p><p>Dois grafos, G’ e G’’, são homeomorfos se podem ser obtidos a partir do mesmo</p><p>grafo e de uma sequência de reduções de séries. Outra forma de definir que G’ e</p><p>G’’ são homeomorfos é se eles podem ser reduzidos</p><p>a grafos isomorfos por meio</p><p>de reduções de séries.</p><p>A Figura 30 (do lado esquerdo) apresenta dois grafos homeomorfos, pois ao se</p><p>aplicarem várias reduções de séries, obtém-se dois grafos isomorfos (do lado direito).</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 28</p><p>Grafo com vértices em série</p><p>v1 v5</p><p>v4v2 v3</p><p>Problemas em Grafos 109</p><p>No primeiro grafo da Figura 30, foi reduzida a série (v1, v6), (v6, v7) e, em seguida,</p><p>a (v1, v7), (v7, v5). No segundo grafo da Figura 30 foi reduzida a série (v1, v7), (v7, v2)</p><p>seguida da (v1, v6), (v6, v5) e, por fim, a (v2, v3), (v3, v4).</p><p>v1 v5</p><p>v4v2</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 30</p><p>Grafos homeomorfos</p><p>v1 v5</p><p>v4v2 v3</p><p>v6 v7</p><p>v1 v5</p><p>v4v2 v3</p><p>v6</p><p>v7</p><p>v1 v5</p><p>v4v2</p><p>Por meio dos grafos K5 e K3,3 e do conceito de homeomorfismo de grafos, o Teo-</p><p>rema de Kuratowski dá as condições necessárias e suficientes para indicar se um</p><p>grafo é planar ou não (NICOLETTI; HRUSCHKA, 2018).</p><p>Teorema 2</p><p>Teorema Kuratowsk</p><p>Um grafo G é planar, se, e somente se, não tem um subgrafo homeomorfo a K5</p><p>ou K3,3.</p><p>Observe o grafo não planar da Figura 31. Para mostrar que esse grafo não é</p><p>planar, pode-se buscar por um subgrafo homeomorfo a K5 ou K3,3. Um subgrafo é</p><p>obtido pela remoção de arestas e vértices. Para a propriedade de homeomorfismo,</p><p>faz-se redução de série.</p><p>v1</p><p>v5</p><p>v4</p><p>v8</p><p>v9</p><p>v6v7</p><p>v2 v3</p><p>Figura 18</p><p>Grafo não planar</p><p>Fonte: Elaborada pelo autor.</p><p>110 Teoria dos Grafos</p><p>Para provar que esse grafo não é planar, a ideia é eliminar vértices e arestas</p><p>para encontrar um subgrafo que seja homeomorfo a K5 ou K3,3. Ao encontrar esse</p><p>subgrafo, efetuam-se reduções de série até encontrar um subgrafo que seja iso-</p><p>morfo a K5 ou K3,3.</p><p>A Figura 32 apresenta os passos efetuados até aqui. Primeiramente, serão elimi-</p><p>nadas as arestas (v4, v5) e (v2, v3). Esse subgrafo obtido é homeomorfo a K3,3 e, para</p><p>ter certeza, efetuam-se as seguintes reduções de série: 1ª. redução (v1, v9) e (v9, v5),</p><p>2ª. redução (v2, v8) e (v8, v5), e 3ª. redução (v3, v7), (v7, v6). Assim, pode-se perceber que</p><p>o grafo obtido é isomorfo a K3,3.</p><p>Figura 32</p><p>Passos para provar que o grafo não é planar</p><p>v1</p><p>v5</p><p>v4</p><p>v8</p><p>v9</p><p>v6v7</p><p>v2 v3</p><p>Remoção</p><p>de (V4, V5) e</p><p>(V2, V3)</p><p>v1</p><p>v5</p><p>v8</p><p>v9</p><p>v6v7</p><p>v3</p><p>v4</p><p>v2</p><p>Redução de</p><p>série (V1, V9) e</p><p>(V9, V5)</p><p>v1</p><p>v5</p><p>v8</p><p>v9</p><p>v6v7</p><p>v3</p><p>v4</p><p>v2</p><p>v1</p><p>v5</p><p>v8</p><p>v6v7</p><p>v3</p><p>v4</p><p>v2</p><p>Redução de</p><p>série (V2, V8) e</p><p>(V8, V5)</p><p>v1</p><p>v5</p><p>v8</p><p>v6v7</p><p>v3</p><p>v4</p><p>v2</p><p>v1</p><p>v5</p><p>v6v7</p><p>v3</p><p>v4</p><p>v2</p><p>Fonte: Elaborada pelo autor.</p><p>Redução de</p><p>série (V3, V7) e</p><p>(V7 V6)</p><p>v1</p><p>v5</p><p>v6v7</p><p>v3</p><p>v4</p><p>v2</p><p>v1</p><p>v5</p><p>v6</p><p>v3</p><p>v4</p><p>v2</p><p>O primeiro algoritmo para teste de planaridade surgiu, em 1961, com Auslander</p><p>e Parter (AUSLANDER; PARTER, 1961). O algoritmo posteriormente foi corrigido por</p><p>Problemas em Grafos 111</p><p>Goldstein e, então, ficou conhecido como Algoritmo Auslander, Parter e Goldstein (Al-</p><p>goritmo APG) e possui complexidade cúbica (GOLDSTEIN, 1963).</p><p>O primeiro algoritmo com complexidade de tempo linear, para verificação de</p><p>planaridade de grafos, é o Hopcroft e Tarjan (Algoritmo HT), fundamentado no al-</p><p>goritmo APG (HOPCROFT; TARJAN, 1974).</p><p>Outros algoritmos também foram desenvolvidos e são tópicos de pesquisa mais</p><p>avançada na área.</p><p>5.5 Coloração</p><p>Vídeo Em grafos, uma coloração vértices é uma atribuição de rótulos aos vértices de</p><p>grafos, tradicionalmente chamados de cores, de tal forma que não haja dois vérti-</p><p>ces adjacentes rotulados com a mesma cor (NICOLETTI; HRUSCHKA, 2018). Em teoria</p><p>de grafos, também há os conceitos de coloração de arestas e coloração de faces, mas,</p><p>aqui, será abordada apenas a coloração de vértices, sendo o ponto de partida para</p><p>o estudo de coloração em grafos.</p><p>A Figura 33 apresenta um grafo com uma coloração aplicada.</p><p>Uma coloração de vértices contendo k cores diferentes é chama-</p><p>da de k-coloração e, nesse caso, o grafo é k-colorível. No exemplo</p><p>apresentado na figura tem-se três cores, portanto, trata-se de uma</p><p>3-coloração para o grafo.</p><p>Claramente, percebe-se que em um grafo com n vértices, po-</p><p>de-se usar n cores, uma para cada vértice e, dessa forma, segu-</p><p>ramente, vértices adjacentes não possuirão a mesma cor. Assim,</p><p>encontrar uma n-coloração em um grafo com n vértices, é trivial e</p><p>não possui utilidade prática. Já encontrar uma coloração mínima,</p><p>isto é, obtida com um número mínimo de cores, é um problema</p><p>difícil e possui muitas aplicações práticas.</p><p>Em um grafo G, o número mínimo n de cores possíveis, tal que existe uma</p><p>n-coloração em G, é chamado de índice cromático ou número cromático, denotado</p><p>por χ(G). Assim, se χ(G) = n, então, G é n-cromático.</p><p>Se o grafo possui laços (vértices adjacentes a si mesmos), então, não há colora-</p><p>ção possível. Se existem arestas paralelas, ou seja, arestas que incidem nos mes-</p><p>mos vértices, diz-se que os vértices em questão são adjacentes e será considerada</p><p>somente uma dessas arestas. Assim, consideram-se somente grafos simples.</p><p>Com base nisso, tem-se os seguintes teoremas e definições:</p><p>Teorema 3</p><p>Se um grafo G tem n vértices, então, χ(G) ≤ n.</p><p>Esse teorema é intuitivo. Se todos os n vértices de um grafo forem conecta-</p><p>dos a todos os demais, será necessário n cores para colori-lo. Caso contrário, há a</p><p>possibilidade do número cromático ser menor que n. Então, n é um limite máximo</p><p>para o número de cores necessárias para colorir qualquer grafo.</p><p>v1 v5</p><p>v4v2</p><p>v3</p><p>Figura 33</p><p>Grafo com uma coloração aplicada</p><p>Fonte: Elaborada pelo autor.</p><p>112 Teoria dos Grafos</p><p>Um grafo em que cada vértice é conectado a todos os demais é chamado de gra-</p><p>fo completo. Um grafo completo, com n vértices, é denotado por Kn e, assim, segue</p><p>o próximo teorema.</p><p>Teorema 4</p><p>Seja o grafo Kn, então, χ(Kn) = n, para todo n ≥ 1.</p><p>Isto é facilmente observado em grafos completos. Como o exemplo do K5, na</p><p>Figura 34, em que são cinco vértices e cada vértice é adjacente aos outros quatro</p><p>vértices. Para o Kn, cada vértice é ligado aos outros n – 1 vértices. Assumindo v1, é</p><p>necessária uma cor para colorir v1 e cores diferentes para cada vértice adjacente,</p><p>ou seja, mais quatro cores. O mesmo raciocínio vale para Kn.</p><p>A Figura 35 apresenta uma coloração possível para o K5.</p><p>v4 v3</p><p>v2</p><p>v1</p><p>v5</p><p>Figura 34</p><p>Grafo K5</p><p>Fonte: Elaborada pelo autor.</p><p>v4 v3</p><p>v2</p><p>v1</p><p>v5</p><p>Figura 35</p><p>Grafo K5 colorido</p><p>Fonte: Elaborada pelo autor.</p><p>O Teorema 4 também relaciona os conceitos de coloração e cliques, isto é,</p><p>subgrafos completos. Como são necessárias p cores para colorir os p vértices de</p><p>uma clique, então, para um grafo G, seu número cromático é maior ou igual ao</p><p>tamanho da sua maior clique. Pode-se dizer que, se um grafo G contém Kn como</p><p>subgrafo, então, χ(G) ≥ n.</p><p>O próximo teorema apresenta o valor do número cromático para grafos</p><p>bipartidos.</p><p>Teorema 5</p><p>Seja um grafo G não vazio, tem-se χ(G) = 2, ou seja, o grafo é bicolorível, se, e</p><p>somente se, G for bipartido.</p><p>Esse teorema também é intuitivo, pois os grafos bipartidos são formados por</p><p>dois conjuntos de vértices, sendo que os vértices pertencentes a cada um desses</p><p>Problemas em Grafos 113</p><p>conjuntos não são adjacentes entre si. Desse modo, para cada conjunto, basta atri-</p><p>buir uma cor a todos seus vértices e, assim, o grafo total é bicolorível.</p><p>A Figura 36 mostra um grafo bipartido, visto que pode ser separado em dois</p><p>conjuntos de vértices, {v1, v2} e {v3, v4, v5}, de modo que os vértices não são adja-</p><p>centes dentro dos conjuntos apresentados e as arestas existentes ligam vértices</p><p>entre os conjuntos. Assim, cada um desses conjuntos recebe uma cor e a Figura 37</p><p>apresenta uma coloração possível.</p><p>v2</p><p>v5v4</p><p>v1</p><p>v3</p><p>Figura 36</p><p>Grafo Bipartido</p><p>Fonte: Elaborada pelo autor.</p><p>Figura 37</p><p>Grafo Bipartido Colorido</p><p>Fonte: Elaborada pelo autor.</p><p>v4 v5v3</p><p>v2</p><p>v1</p><p>O conceito de coloração também é relacionado ao de conjunto independente de</p><p>vértices. Um conjunto independente de vértices, ou um conjunto estável de vértices,</p><p>de um grafo é o conjunto de vértices totalmente desconexos. Em outros termos,</p><p>eles não são adjacentes entre si.</p><p>Essa propriedade pode ser observada no grafo da Figura 37, em que os conjun-</p><p>tos {v1, v2} e {v3, v4,</p><p>v5} possuem vértices não adjacentes entre si e, portanto, são</p><p>conjuntos estáveis de vértices.</p><p>A Figura 38 apresenta o grafo G.</p><p>v3</p><p>v5v4</p><p>v7</p><p>v6</p><p>v1v2</p><p>Figura 38</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>Consegue-se obter três conjuntos independentes de vértices de G, que são</p><p>disjuntos, por exemplo:</p><p>114 Teoria dos Grafos</p><p>• {v5, v1, v7}</p><p>• {v2, v3, v4}</p><p>• {v6}</p><p>Assim, cada um desses conjuntos pode ser colorido com uma cor diferente, con-</p><p>forme mostra a Figura 39.</p><p>v3</p><p>v5v4</p><p>v7</p><p>v6</p><p>v1v2</p><p>Figura 39</p><p>Grafo G colorido</p><p>Fonte: Elaborada pelo autor.</p><p>Seja uma k-coloração a um grafo G = (V, A) e sejam V1, V2, ..., Vk os subconjuntos</p><p>disjuntos de V, induzidos pela k-coloração, então, cada Vi é um conjunto indepen-</p><p>dente de vértices de G. Assim, para determinar uma coloração mínima de G, pode-</p><p>-se particionar o conjunto V em um número mínimo de conjuntos independentes</p><p>de vértices, sendo que cada um desses conjuntos receberá uma cor.</p><p>Considerando o grafo G = (V, A), o grau máximo de G, denotado por ∆(G), é o</p><p>grau do vértice que possui o maior grau em G, isto é, ∆(G) = max{ grau(v) | v ∈ V }.</p><p>Pode-se observar que sempre é possível colorir um grafo G com ∆(G)+1 cores. Isso</p><p>porque, se os vértices possuem grau no máximo ∆(G), usa-se uma cor para o próprio</p><p>vértice e ∆(G) cores para os adjacentes. Mesmo para grafos completos, Kn possui ∆(G)</p><p>= n – 1, o que significa que são necessárias n cores para colori-lo.</p><p>Assim, há um limite para o número cromático, em qualquer grafo, dado por</p><p>χ(G) ≤ ∆(G)+1.</p><p>O próximo teorema foi enunciado pelo matemático inglês Rowland Leonard</p><p>Brooks (1916-1993) em 1941, e dá uma relação do melhor que a apresentada ante-</p><p>riormente, entre o número cromático e o grau máximo de um grafo.</p><p>Teorema 6</p><p>Teorema de Brooks (1941)</p><p>Seja um grafo simples conexo G e seja ∆(G) ≥ 3. Se G não é um grafo completo (Kn)</p><p>e não possui ciclos ímpares (com um número ímpar de vértices), então, χ(G) ≤ ∆(G).</p><p>O Teorema de Brooks é um resultado importante, pois dá um limite melhor para</p><p>o número cromático χ(G) de um grafo, com ∆(G) como seu grau máximo. Em suma,</p><p>Problemas em Grafos 115</p><p>dado um grafo G que atende algumas condições (∆(G) ≥ 3, não ser Kn, nem ter ciclos</p><p>ímpares), o número cromático será sempre menor ou igual ao seu grau máximo.</p><p>Outro resultado importante da coloração de grafos é o Teorema das Quatro</p><p>Cores, conjecturado por Francis Guthrie em 1952, provado pelo matemático</p><p>estadunidense Kenneth Appel (1932-2013) e pelo matemático alemão Wolfgang</p><p>Haken (1928-) em 1976. Este também foi o primeiro teorema matemático provado</p><p>com o auxílio de um computador.</p><p>Teorema 7</p><p>Teorema das Quatro Cores, Appel e Haken</p><p>Todo grafo planar é 4-colorível.</p><p>Este teorema indica que qualquer grafo planar pode ser colorido com quatro co-</p><p>res. Mas decidir se um grafo planar é 3-colorível é um problema difícil (NP-Completo).</p><p>Há várias aplicações para coloração em grafos; um exemplo é a aplicação de</p><p>coloração em grafos para o controle de tráfego aéreo (BARNIER; BRISSET, 2004). O</p><p>objetivo é evitar o congestionamento e o cruzamento entre voos que trafegam na</p><p>mesma altura, modelando os cruzamentos dos voos. Cada voo é modelado como</p><p>um vértice e cada cruzamento como uma aresta entre dois voos. Uma coloração,</p><p>nesse grafo, determina a distribuição de diferentes alturas, isto é, cada cor uma</p><p>altura que deve ser atribuída ao voo, garantindo a segurança nos cruzamentos.</p><p>CONSIDERAÇÕES FINAIS</p><p>Neste capítulo foram estudados outros problemas em grafos, os conceitos de cli-</p><p>que, conjunto estável de vértices e o problema da clique. Também foi abordado o</p><p>conceito de cobertura, tanto de arestas quanto de vértices, bem como sua aplicação.</p><p>A planaridade do grafo também foi explorada, expondo os teoremas que dão base ao</p><p>estudo. Por fim, o problema da coloração de grafos foi apresentado, assim como seus</p><p>teoremas e um exemplo de aplicação.</p><p>ATIVIDADES</p><p>1. Enumere todas as cliques com tamanho maior ou igual a 2 do grafo a seguir.</p><p>v1 v5</p><p>v4v2</p><p>v3</p><p>116 Teoria dos Grafos</p><p>2. Dê a clique máxima do grafo a seguir.</p><p>v7 v5</p><p>v1</p><p>v4</p><p>v2</p><p>v3</p><p>v6</p><p>3. Seja o grafo K3,3. desenhe o grafo e dê uma cobertura de arestas.</p><p>4. Considerando um grafo planar com oito vértices, qual o limite máximo de arestas</p><p>que esse grafo contém?</p><p>5. Utilizando o Teorema de Kuratowski, prove que o grafo a seguir não é planar.</p><p>v7</p><p>v6v8</p><p>v1</p><p>v2v5</p><p>v3v4</p><p>6. Dado o grafo a seguir, encontre a uma coloração mínima e dê seu número</p><p>cromático.</p><p>v7</p><p>v6</p><p>v8</p><p>v1</p><p>v2</p><p>v5</p><p>v3</p><p>v4</p><p>Problemas em Grafos 117</p><p>REFERÊNCIAS</p><p>AUSLANDER, L; PARTER, S. On imbeddings graphs in the plane, J. Math and Mech, v. 10, n. 3, p. 517-523,</p><p>1961.</p><p>BARNIER, N.; BRISSET, P. Graph Coloring for Air Traffic Flow Management. Annals of Operation Research, n.</p><p>130, p.163-178, 2004.</p><p>GOLDBARG, M. C.; GOLDBARG, E. Grafos: conceitos, algoritmos e aplicações. Rio de Janeiro: Elsevier, 2012.</p><p>GOLDSTEIN, A. An efficient and constructive algorithm for testing whether a graph can be embedded in a</p><p>plane. Graph and Combinatorics Conference, Dept. Math., Princeton University, p. 16-18, 1963.</p><p>HOPCROFT, J; TARJAN, R. Efficient planarity testing. Journal of the Association for Computing Machinery, v. 21,</p><p>n. 4, p. 549-568, 1974.</p><p>NICOLETTI, M. C.; HRUSCHKA Jr, E. R. Fundamentos da teoria dos grafos para computação. São Paulo: Editora</p><p>LTC, 2018.</p><p>RHODES, N. et al. CLIP: similarity searching of 3D databases using clique detection. Journal of Chemical</p><p>Information and Computer Sciences, v. 43, n. 2, p. 443–448, 2003.</p><p>SANTOS, E. L. S. Planaridade em grafos: o teorema de Kuratowski. São Cristóvão, 2017. Dissertação(Mestrado</p><p>em Matemática) – Universidade Federal de Sergipe.</p><p>SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.</p><p>SZWARCFITER, J. L.; FIGUEIREDO, C. M. H. de F. Emparelhamento em Grafos: Algoritmos e Complexidade.</p><p>Jornada de Atualização em Informática (JAI). Rio de Janeiro. 1999.</p><p>ZUGE, A. P. Algoritmos para o problema da clique máxima: análise e comparação experimental. Curitiba,</p><p>2017. Tese (Doutorado em Ciência da Computação) – Universidade Federal do Paraná.</p><p>118 Teoria dos Grafos</p><p>GABARITO</p><p>1 Introdução ao estudo dos grafos</p><p>1. Pelo teorema de Euler (1736), o teórico provou que para um grafo ser euleriano</p><p>todos os seus vértices precisam ter grau par. Assim, uma solução possível é dada</p><p>pela figura a seguir. As pontes (arestas) adicionadas estão tracejadas e são a8, a9 e a10.</p><p>a1</p><p>a2</p><p>a8</p><p>a4a7</p><p>a6</p><p>a9</p><p>a5v2</p><p>a3</p><p>a10</p><p>v1</p><p>v3</p><p>v4</p><p>E um possível ciclo euleriano, partindo de v1 é: a1, a2, a10, a3, a6, a5, a9, a7, a4, a8.</p><p>2. Uma representação geométrica possível é:</p><p>3</p><p>2</p><p>6</p><p>4</p><p>5</p><p>1</p><p>Gabarito 119</p><p>3. A matriz de adjacências é uma matriz contendo todos os vértices nas linhas e</p><p>colunas. Coloca-se 1 se os vértices são adjacentes e 0 caso contrário. Assim, a</p><p>matriz de adjacências é:</p><p>1 2 3 4 5 6</p><p>1 0 0 1 1 1 0</p><p>2 0 0 1 1 1 0</p><p>3 1 1 0 0 1 0</p><p>4 1 1 0 0 1 0</p><p>5 1 1 1 1 0 0</p><p>6 0 0 0 0 0 0</p><p>4. Sim, o grafo é bipartido, portanto, seus vértices podem ser separados em dois</p><p>conjuntos: V1 = {1, 2, 4, 5} e V2= {3, 6}, tal que não existe aresta entre os vértices</p><p>de V1, nem de V2, e toda aresta conecta um vértice de V1 com um vértice de V2.</p><p>Colorindo diferentemente os dois conjuntos, tem-se o grafo a seguir.</p><p>32</p><p>4</p><p>5</p><p>1</p><p>6</p><p>5. O grau de um grafo é dado pela soma do grau de seus vértices, nesse caso: 5+2+2+2+2+1</p><p>= 14. Como o grau de um grafo é o dobro do número de arestas, esse grafo possui sete</p><p>arestas. Uma possível representação é dada pela figura a seguir:</p><p>v4</p><p>v5v6</p><p>v3v2</p><p>v1</p><p>2 Conectividade</p><p>1. As componentes conexas de um grafo são seus subgrafos maximais – que não</p><p>estão contidos em outros grafos – conexos. Assim, no grafo apresentado tem-se</p><p>duas componentes conexas:</p><p>120 Teoria dos Grafos</p><p>v4</p><p>v6</p><p>v5</p><p>v2</p><p>v1</p><p>v3</p><p>2. Sendo um digrafo, o caminho deve seguir as orientações das arestas. Portanto um</p><p>caminho entre v3 e v4 é: (v3, v6), (v6, v2), (v2, v5), (v5, v4), representado na figura a seguir.</p><p>v1</p><p>v4</p><p>v5</p><p>v2</p><p>v6v3</p><p>3. Um ciclo euleriano é um caminho que</p><p>inicia e termina no mesmo vértice que passa</p><p>por todas as arestas do grafo somente uma vez. Assim, no grafo apresentado um</p><p>ciclo euleriano é: (v1, v3), (v3, v5), (v5, v4), (v4, v2), (v2, v1), (v1, v5), (v5, v2), (v2, v3), (v3, v4), (v4, v1)</p><p>4. Um grafo semi-hamiltoniano é um grafo que possui um caminho hamiltoniano,</p><p>mas não um ciclo hamiltoniano. Assim, basta adicionar uma aresta entre o término</p><p>e a origem de um caminho hamiltoniano.</p><p>No caso do grafo apresentado, o caminho hamiltoniano é: (v1, v3), (v3, v4), (v4, v2).</p><p>Desse modo, basta adicionar a aresta (v2, v1) e o grafo se torna hamiltoniano com o</p><p>seguinte ciclo hamiltoniano: (v1, v3), (v3, v4), (v4, v2), (v2, v1).</p><p>O grafo fica:</p><p>v4</p><p>v2</p><p>v3v1</p><p>5. Um subgrafo induzido G’ sobre um grafo G é aquele em que, dados todos os</p><p>vértices pertencentes a G’, todas as arestas em G sobre estes vértices também</p><p>Gabarito 121</p><p>são arestas em G’. Assim, o subgrafo a seguir é um subgrafo induzido do grafo</p><p>apresentado no enunciado da questão.</p><p>v5</p><p>v2</p><p>v1</p><p>6. As componentes biconexas, ou blocos de um grafo, são os subgrafos maximais</p><p>biconexos em vértices – isto é, não possui articulações – ou isomorfos a K2. Assim,</p><p>as componentes biconexas ou blocos do grafo apresentado são:</p><p>v8</p><p>v8</p><p>v7</p><p>v6</p><p>v2</p><p>v6</p><p>v2</p><p>v6</p><p>v7</p><p>v4</p><p>v1</p><p>v2</p><p>v3</p><p>3 Caminho mínimo e árvores geradoras</p><p>1. A árvore de busca em profundidade resultante é:</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>2. A árvore de busca em largura resultante é:</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>122 Teoria dos Grafos</p><p>3. A árvore geradora mínima obtida pelo algoritmo de Prim é:</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>1</p><p>3</p><p>2</p><p>3</p><p>5</p><p>4. A árvore geradora mínima obtida pelo algoritmo de Kruskal é:</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>1</p><p>3</p><p>2</p><p>3</p><p>5</p><p>5. Para melhor entendimento, os rótulos e as distâncias estão assinalados no grafo</p><p>a seguir.</p><p>v5 v3</p><p>v2</p><p>v1</p><p>v4</p><p>v6</p><p>1</p><p>3</p><p>10</p><p>2</p><p>2</p><p>4</p><p>3</p><p>5</p><p>V1 4</p><p>V1 3</p><p>V6 6V6 8</p><p>V5 9</p><p>0 0</p><p>4 Grafos eulerianos e hamiltonianos</p><p>1. Partindo da terra, as escolhas são:</p><p>• Terra → Calisto: 3,1 anos</p><p>• Calisto → Io: 0,8 anos</p><p>Gabarito 123</p><p>• Io → Ganímedes: 1,1 anos</p><p>• Ganímedes → Mimas: 5,7 anos</p><p>• Mimas → Titan: 0,6 anos</p><p>• Titan → Terra: 8,1 anos</p><p>Total de 19,4 anos de expedição.</p><p>2. A busca gulosa com repetição calcula um ciclo hamiltoniano iniciando de cada</p><p>vértice e escolhe o menor. Os ciclos encontrados são:</p><p>• Terra → Calisto → Io → Ganímedes → Mimas → Titã → Terra: 19,4 anos</p><p>• Calisto → Io → Ganímedes → Terra → Titã → Mimas → Calisto: 19 anos</p><p>• Io → Calisto → Ganímedes → Terra → Titã → Mimas → Io: 18,9 anos</p><p>• Ganímedes → Io → Calisto → Terra → Titã → Mimas → Ganímedes: 19,4 anos</p><p>• Mimas → Titã → Io → Calisto → Ganímedes → Terra → Mimas: 19,4 anos</p><p>• Titã → Mimas → Io → Calisto → Ganímedes → Terra → Titã: 18,9 anos</p><p>Assim, escolhe-se um dos ciclos de 18,9 anos, por exemplo:</p><p>• Io → Calisto → Ganímedes → Terra → Titã → Mimas → Io: 18,9 anos.</p><p>Rearranjado para iniciar na Terra:</p><p>Terra → Titã → Mimas → Io → Calisto → Ganímedes → Terra.</p><p>3. O caminho euleriano é dado pelas seguintes arestas:</p><p>(v1, v8), (v8, v2), (v2, v7), (v7, v5), (v5, v6), (v6, v7), (v7, v3), (v3, v5), (v5, v4), (v4, v3), (v3, v2), (v2, v1)</p><p>4. O Teorema de Ore afirma que se o grafo possui mais de 3 vértices e para todo par</p><p>de vértices não adjacentes a soma de seus graus for maior ou igual ao número de</p><p>vértices, então, o grafo é hamiltoniano.</p><p>Assim, se as condições do teorema forem satisfeitas, garante-se um grafo</p><p>hamiltoniano.</p><p>O grafo G possui 6 vértices (que é maior ou igual a 3, conforme condição). Não é</p><p>informado quais vértices são adjacentes, mas como todos têm grau igual a três,</p><p>a soma dos graus de quaisquer pares de vértices é igual a 6. Para os vértices não</p><p>adjacentes, a soma de seus graus também é 6, atendendo à outra condição do</p><p>teorema.</p><p>Portanto, o grafo G é hamiltoniano.</p><p>5. O grafo G não é euleriano. O Teorema de Euler atesta que o grafo ter grau par em</p><p>todos os vértices é uma condição necessária e suficiente para ser euleriano.</p><p>O grafo G apresentado possui os vértices v1 e v2 com grau ímpar, portanto, não é</p><p>euleriano.</p><p>5 Problemas em Grafos</p><p>1. Uma clique é um subconjunto de vértices que induz o subgrafo completo do grafo</p><p>original. No grafo apresentado tem-se 12 cliques, oito de tamanho 2 e quatro</p><p>cliques de tamanho 3, a saber:</p><p>• {v1, v2}</p><p>• {v2, v4}</p><p>124 Teoria dos Grafos</p><p>• {v4, v5}</p><p>• {v1, v5}</p><p>• {v1, v3}</p><p>• {v2, v3}</p><p>• {v3, v4}</p><p>• {v3, v5}</p><p>• {v1, v2, v3}</p><p>• {v1, v3, v5}</p><p>• {v2, v3, v4}</p><p>• {v3, v4, v5}</p><p>2. A clique máxima nesse grafo é {v2, v7, v5, v4}, que induz a um subgrafo K4. Observe</p><p>a seguir o grafo apresentado com as arestas adjacentes aos vértices da clique em</p><p>tracejado.</p><p>v7 v5</p><p>v1</p><p>v4</p><p>v2</p><p>v3</p><p>v6</p><p>3. Grafo K3,3:</p><p>v4 v5 v6</p><p>v2 v3v1</p><p>Uma cobertura de arestas é: {(v1, v4), (v2, v5), (v3, v6)} e pode ser vista em tracejado a</p><p>seguir.</p><p>v4 v5 v6</p><p>v2 v3v1</p><p>Gabarito 125</p><p>4. Pelo Corolário 5.2, um grafo planar tem seu número de arestas limitado pela</p><p>seguinte fórmula: a ≤ 3n – 6. Assim, um grafo planar, contendo oito vértices, possui,</p><p>no máximo, 18 arestas.</p><p>5. O Teorema de Kuratowski afirma que um grafo é planar, se, e somente se, não</p><p>possuir um subgrafo homeomorfo a K5 ou K3,3.</p><p>Como se quer provar que o grafo não é planar, para conseguir um subgrafo pode-se</p><p>remover arestas ou vértices até encontrar um grafo homeomorfo a K5 ou K3,3.</p><p>Para o grafo em questão, removem-se as arestas (v8, v6) e (v1, v7), obtendo-se o</p><p>seguinte grafo:</p><p>v7</p><p>v6v8</p><p>v1</p><p>v2v5</p><p>v3v4</p><p>Esse grafo é homeomorfo a K5 e isso pode ser observado, pois, se forem removidas</p><p>as séries 1) (v4, v8), (v8, v5); 2) (v4, v7), (v7, v3); e 3) (v2, v6) e (v6, v3), obtém-se exatamente</p><p>o K5, como pode ser observado no grafo a seguir, provando que o grafo original</p><p>não é planar.</p><p>v4 v3</p><p>v2v5</p><p>v1</p><p>6. O número cromático do grafo é 2, pois é possível usar, no mínimo, duas cores para</p><p>colori-lo. A seguir tem-se o resultado da aplicação da coloração no grafo.</p><p>v7</p><p>v6</p><p>v8</p><p>v1</p><p>v2</p><p>v5</p><p>v3</p><p>v4</p><p>Razer Anthom Nizer Rojas Montaño</p><p>TEORIA DOS GRAFOS</p><p>Razer Anthom</p><p>N</p><p>izer Rojas M</p><p>ontaño</p><p>Código Logístico</p><p>59398</p><p>Fundação Biblioteca Nacional</p><p>ISBN 978-85-387-6636-0</p><p>9 7 8 8 5 3 8 7 6 6 3 6 0</p><p>servem de base para o estudo dos grafos. Por</p><p>meio delas, é possível elaborar problemas complexos de maneira correta, seguindo</p><p>o formalismo matemático.</p><p>1.3 Tipos de grafos</p><p>Vídeo Os grafos podem ser classificados em diversos tipos, de acordo com algumas</p><p>características específicas. Essas podem ser estruturais, sendo direcionamento das</p><p>arestas, ou na composição dos seus elementos, por exemplo, possuindo somente</p><p>um vértice e nenhuma aresta.</p><p>Relembrando a definição apresentada na Seção 1.2, um grafo simples não</p><p>possui laços, isto é, arestas com pontas no mesmo vértice, nem arestas diferen-</p><p>tes que incidem nos mesmos vértices, ou paralelas (Figura 7). Um pseudografo</p><p>é um grafo que contém laços; já um multigrafo é um grafo que contém arestas</p><p>paralelas.</p><p>v4</p><p>v5</p><p>v3</p><p>Figura 7</p><p>Grafo simples</p><p>Fonte: Elaborada pelo autor.</p><p>v2</p><p>v1</p><p>O livro Uma Introdução</p><p>Sucinta à Teoria dos Grafos</p><p>é uma leitura complemen-</p><p>tar que reforça os concei-</p><p>tos básicos de grafos.</p><p>FEOFILOFF, P.; KOHAYAKAWA, Y.;</p><p>WAKABAYASHI, Y. São Paulo: Edusp,</p><p>2011.</p><p>Livro</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>Introdução ao estudo dos grafos 15</p><p>Ademais, estendendo a definição dos grafos, pode-se ter grafos com arestas</p><p>direcionadas, em que uma aresta v, w conecta o vértice v a w e, portanto, é dife-</p><p>rente da aresta (w, v), que conecta o vértice w a v. Nesse caso, tem-se um grafo</p><p>orientado ou digrafo. Este último é representado graficamente com as arestas</p><p>contendo setas (Figura 8). Também, é possível que os grafos possuam valores</p><p>(pesos) nas arestas, sendo chamados, nesse caso, de grafo ponderado ou valora-</p><p>do, podendo ou não ser direcionado (Figura 9).</p><p>Figura 9</p><p>Grafo ponderado ou valorado</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>3</p><p>1</p><p>1</p><p>5</p><p>8</p><p>20</p><p>10</p><p>Figura 8</p><p>Digrafo ou grafo direcionado</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Um grafo nulo é um grafo que possui um conjunto de vértices</p><p>vazio, ou seja, G = (V, A), V = Ø. Já um grafo trivial possui apenas um</p><p>vértice e nenhuma aresta.</p><p>Um grafo regular é um grafo em que todos os vértices possuem</p><p>o mesmo número de arestas incidentes (Figura 10).</p><p>Outros exemplos de grafos regulares podem ser vistos na figura a</p><p>seguir. É importante perceber, também, que qualquer grafo comple-</p><p>to é regular, como observado na Figura 2.</p><p>Figura 11</p><p>Grafos regulares</p><p>Fonte: Elaborada pelo autor.</p><p>Um grafo é conexo quando é possível estabelecer um caminho desde um vértice</p><p>até qualquer outro vértice passando por arestas. Todos os grafos apresentados até</p><p>agora são conexos, caso contrário, trata-se de um grafo desconexo. No exemplo a</p><p>seguir, o vértice v3 faz parte do grafo, mas não tem aresta com nenhum outro vértice.</p><p>Já na Figura 12-B, os vértices v3 e v5 possuem aresta entre si, mas não aresta com a</p><p>outra parte do grafo, sendo, também, desconexo.</p><p>Figura 10</p><p>Grafo regular</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v3</p><p>v2</p><p>v1</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>cicer</p><p>Destacar</p><p>16 Teoria dos Grafos</p><p>Figura 12</p><p>Grafo desconexo</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Fonte: Elaborada pelo autor.</p><p>A – Exemplo de grafo com um vértice desconexo. B – Grafo com um subgrafo desconexo.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Um grafo é dito acíclico se não possui ciclos, isto é, quando não é possível caminhar</p><p>de um vértice a vértices adjacentes até retornar à origem. O grafo simples da Figura 7 é</p><p>cíclico, visto que se pode caminhar de v2 até v4 por uma aresta, então de v4 a v5 por ou-</p><p>tra aresta e de v5 até v2. Caso contrário, é chamado de grafo acíclico, como na Figura 13.</p><p>v4</p><p>v5</p><p>Figura 13</p><p>Grafo acíclico</p><p>Fonte: Elaborada pelo autor.</p><p>v3</p><p>v2</p><p>v1</p><p>Chama-se árvore um grafo simples, acíclico e conexo. Simples significa que não</p><p>pode ter laços nem arestas paralelas; acíclico indica que não é possível caminhar</p><p>entre os vértices partindo de v e chegando novamente em v; e conexo determi-</p><p>na que todos os vértices precisam ser atingíveis por qualquer vértice. O grafo da</p><p>Figura 13 também é uma árvore.</p><p>Se o grafo for simples, acíclico, mas não conexo, é chamado de floresta, isto é,</p><p>uma união disjunta de árvores. A Figura 14 apresenta uma floresta formada por</p><p>três árvores.</p><p>v4</p><p>v5</p><p>Figura 14</p><p>Grafo floresta</p><p>Fonte: Elaborada pelo autor.</p><p>v3</p><p>v7</p><p>v9</p><p>v6</p><p>v8</p><p>v2</p><p>v1</p><p>cicero.britto</p><p>Destacar</p><p>cicero.britto</p><p>Destacar</p><p>cicero.britto</p><p>Destacar</p><p>Introdução ao estudo dos grafos 17</p><p>Um grafo é chamado bipartido por ser separado em dois conjuntos de vérti-</p><p>ces, V1 e V2, de modo que não haja arestas entre elementos do mesmo conjunto</p><p>e que toda aresta de G una um vértice de V1 a outro de V2. Por exemplo, o grafo</p><p>da Figura 15 é bipartido, pois é possível separar seus vértices em dois conjuntos</p><p>V1 = {v1, v2} e V2 = {v3, v4, v5} sem que haja arestas entre {v1, v2}, nem arestas entre</p><p>{v3, v4, v5} e todas as arestas conectam vértices de V1 e V2, ou seja,</p><p>A</p><p>(v, w) ∈ A, v ∈</p><p>V1 e w ∈ V2. A Figura 16 apresenta os subconjuntos V1 e V2.</p><p>Figura 15</p><p>Grafo bipartido</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v2</p><p>v1</p><p>v3</p><p>Figura 16</p><p>Grafo bipartido com os subconjuntos</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v1</p><p>v3</p><p>v5</p><p>v2</p><p>V1</p><p>V2</p><p>Um grafo bipartido completo é um grafo bipartido em que há arestas en-</p><p>tre todos os elementos de V1 e V2. Assumindo |V1| = m e |V2| = n, então, o</p><p>grafo é denotado Km,n. Na Figura 17, pode-se observar alguns grafos bipartidos</p><p>completos.</p><p>K1,3 K2,3 K3,3</p><p>Figura 17</p><p>Grafos bipartidos completos</p><p>Fonte: Elaborada pelo autor.</p><p>O artigo Algoritmos para Grafos em C via Sedgewick, de Paulo Feofiloff, apresenta uma vasta</p><p>gama de materiais básicos e avançados sobre grafos, todos com base no volume Graph</p><p>Algorithms, da terceira edição do livro Algorithms in C, de Robert Sedgewick, que é um clássico</p><p>na ciência da computação.</p><p>Acesso em: 14 abr. 2020.</p><p>https://www.ime.usp.br/~pf/algoritmos_para_grafos/</p><p>Artigo</p><p>1.4 Vizinhança e grau</p><p>Vídeo Nesta seção serão apresentados alguns conceitos referentes à vizinhança e ao</p><p>grau, que darão base para o estudo de problemas mais complexos.</p><p>O número de vértices de um grafo (G = (V, A)) é representado por |V|, sendo a</p><p>quantidade de elementos de V (G) denominada ordem do grafo G. Já o número de</p><p>https://www.ime.usp.br/~pf/algoritmos_para_grafos/</p><p>cicero.britto</p><p>Destacar</p><p>cicero.britto</p><p>Destacar</p><p>cicero.britto</p><p>Destacar</p><p>18 Teoria dos Grafos</p><p>arestas de um grafo é representado por |A|, sendo a quantidade de elementos de</p><p>A (G) denominada dimensão do grafo G.</p><p>Por exemplo, qual a ordem e a dimensão do grafo da figura a seguir?</p><p>Figura 18</p><p>Grafo G com arestas</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1 a3</p><p>a1</p><p>a5</p><p>a2</p><p>a4</p><p>Pode-se visualizar, na Figura 18, a ordem cinco (quantidade de vértices) e a di-</p><p>mensão cinco (quantidade de arestas).</p><p>Dados dois vértices v e w e a aresta a = vw que os conecta, diz-se que a aresta</p><p>a incide em v e incide em w. Considerando o grafo da Figura 18, a aresta a1 incide</p><p>sobre os vértices v2 e v5.</p><p>O par de vértices v e w é dito adjacente se conectado por uma aresta. Duas ares-</p><p>tas são adjacentes quando incidem em um mesmo vértice. Por exemplo, no grafo</p><p>da Figura 18, os vértices v4 e v3 não são adjacentes, pois não possuem uma aresta</p><p>que os conecta. As arestas a2 e a4 são adjacentes, pois incidem no mesmo vértice v2.</p><p>A vizinhança de um vértice é o conjunto de vértices adjacentes a v, denotado</p><p>por vizinhos (v), sendo v não incluído nesse conjunto. A vizinhança fechada é o</p><p>conjunto vizinhos [v] que é o conjunto vizinhos (v), incluindo-se v.</p><p>Analisando o grafo da Figura 18, é possível perceber que a vizinhança de v2 são</p><p>os vértices adjacentes a v2, nesse caso, {v1, v3, v4, v5}. Já a vizinhança fechada de v2 é</p><p>a sua vizinhança incluindo v2, ou seja, {v1, v2, v3, v4, v5}.</p><p>O grau de um vértice é o número de arestas incidentes em v, denotado por</p><p>grau (v). Um vértice que possui grau zero é chamado isolado. No grafo da Figura 18</p><p>não há nenhum vértice isolado (grau zero); já o grau do vértice v3 é um e o grau do</p><p>vértice v4 é dois.</p><p>O grau de um grafo G é a soma dos graus de todos os seus vértices, denotado</p><p>por d (G). Pode-se</p><p>demonstrar facilmente com o seguinte teorema:</p><p>Seja G = (V, A) um grafo não orientado, então:</p><p>d (G) = ∑v∈V grau (v) = 2 * |A|</p><p>Para saber o grau de um grafo, deve-se somar o grau de todos os seus vértices,</p><p>isto é, a quantidade de arestas incidentes em cada vértice. Como cada aresta incide</p><p>sobre dois vértices, cada aresta é sempre considerada duas vezes. Assim, o grau do</p><p>grafo é o dobro do número de arestas.</p><p>O grau máximo de um grafo é o grau do vértice de maior grau em V (G), deno-</p><p>tado por ∆ (G). Já o grau mínimo de um grafo é o grau do vértice de menor grau em</p><p>V (G), denotado por δ (G).</p><p>cicero.britto</p><p>Destacar</p><p>cicero.britto</p><p>Destacar</p><p>Introdução ao estudo dos grafos 19</p><p>O grau do grafo da Figura 18 é dez, pois é a soma dos graus de todos os vértices.</p><p>Percebe-se que é, também, igual ao dobro do número de arestas. O seu grau má-</p><p>ximo é quatro, pois é o grau do vértice que contém o maior grau, que, nesse caso,</p><p>é v2. Já o grau mínimo é um, pois v1 e v3 são os vértices com menor grau.</p><p>Uma sequência de vértices v1,...,vk, tal que (vi, vi+1) ∈ A, 1 ≤ i < k, é denominada</p><p>caminho ou passeio, quando v1 atinge ou alcança vk. Diz-se, ainda, que vk é atingível</p><p>ou alcançável. Um caminho de k vértices é formado por k – 1 arestas, e o valor k – 1</p><p>revela o tamanho do caminho. Um ciclo é um caminho que começa e termina no</p><p>mesmo vértice.</p><p>Quando um caminho passa por todos os vértices do grafo, sem repetição, é</p><p>chamado de caminho hamiltoniano. Este, se for um ciclo, então, é denominado de</p><p>ciclo hamiltoniano, e o grafo que contém um ciclo hamiltoniano é conhecido como</p><p>grafo hamiltoniano.</p><p>Já quando um caminho passa por todas as arestas do grafo, sem repetição, é</p><p>chamado de caminho euleriano. Este, se for um ciclo, então, é denominado de ciclo</p><p>euleriano, e grafo que contém um ciclo euleriano é conhecido como grafo euleriano.</p><p>No grafo da Figura 18, v1 é alcançável por meio de v5, pois consegue um caminho</p><p>partindo de v5 e chegando a v1, por exemplo, v5, v4, v2 e v1. O tamanho desse caminho</p><p>é três, que é o número de arestas presentes.</p><p>A distância entre dois vértices, denotada por d (v, w), é o comprimento do</p><p>menor caminho entre v e w. A excentricidade de um vértice de um grafo é o valor</p><p>máximo da distância entre v e w para todo vértice w ∈ V. Define-se como centro de</p><p>G o subconjunto dos vértices de excentricidade mínima.</p><p>Assim, a distância entre os vértices v1 e v5, no grafo da Figura 18, denotada por</p><p>d (v1, v5), é dois, pois, apesar de haver dois caminhos entre v1 e v5 – a saber, (v1, v2, v4,</p><p>v5) e (v1, v3, v5) – o de menor comprimento é o último, que é dois.</p><p>Os grafos direcionados (digrafo), conforme apresentado anteriormente, são</p><p>aqueles em que as arestas são direcionadas, ou seja, são pares ordenados de</p><p>vértices. Então, sendo G um grafo direcionado, a aresta (v, w) possui uma única</p><p>direção de v para w.</p><p>Define-se, também, o grau de saída de um vértice como sen-</p><p>do o número de arestas que saem de v, e o grau de entrada de</p><p>um vértice como sendo o número de arestas que chegam em v.</p><p>Se um vértice no grafo G possui grau de entrada nulo, então,</p><p>é chamado de fonte. Se possui grau de saída nulo, é chamado de</p><p>sumidouro.</p><p>O grafo da Figura 19 é um digrafo. O vértice v2 possui grau de</p><p>saída dois e grau de entrada três; o vértice v3 é uma fonte, pois</p><p>não possui arestas de entrada; e o vértice v5 é um sumidouro,</p><p>pois não possui arestas de saída.</p><p>Os conceitos de caminho e alcançabilidade de vértices tam-</p><p>bém se aplicam aos digrafos, sempre levando em consideração</p><p>as direções das arestas. Se um vértice alcançar todos os vértices,</p><p>então, v é chamado de raiz do digrafo.</p><p>Figura 19</p><p>Digrafo</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>3</p><p>1</p><p>1</p><p>5</p><p>8</p><p>20</p><p>10</p><p>20 Teoria dos Grafos</p><p>Analisando-se o grafo da Figura 19, o vértice v1 é alcançável por meio de v3, pois</p><p>há o caminho (v3, v2, v1). Já o vértice v4 não é alcançável por v3, pois não há caminho</p><p>partindo de v3 que chega em v4, seguindo as orientações das arestas. Pelas particu-</p><p>laridades desse grafo, nenhum de seus vértices consegue alcançar todos os outros,</p><p>portanto, não há raiz.</p><p>Seja G um digrafo, o grafo obtido pela retirada de todas as direções das arestas</p><p>de G é um multigrafo não direcionado, conhecido como grafo subjacente de G.</p><p>O grafo subjacente do grafo da Figura 19 é o grafo da Figura 20.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 20</p><p>Grafo subjacente</p><p>Fonte: Elaborada pelo autor.</p><p>3</p><p>1</p><p>1</p><p>5</p><p>8</p><p>20</p><p>10</p><p>Conforme apresentado anteriormente, uma árvore é um grafo sem ciclos</p><p>(acíclico) e conexo (todas as arestas são alcançáveis). Se algum vértice possuir grau</p><p>menor ou igual a um é chamado de folha, caso contrário, com grau maior que um,</p><p>é denominado de vértice interior.</p><p>Percebe-se que toda árvore com n vértices possui exatamente n – 1 arestas.</p><p>Assim, um grafo T é uma árvore se, e somente se, existir um único caminho entre</p><p>cada par de vértices de T.</p><p>Uma árvore T = (V, A) é dita enraizada quando algum vértice v ∈ V é escolhido,</p><p>portanto, chamado de raiz da árvore. Uma árvore não enraizada é conhecida como</p><p>árvore livre.</p><p>Seja a árvore T = (V, A) enraizada, de raiz r, sendo dois vértices v, w ∈ V. Se v per-</p><p>tence ao caminho entre r e w, então, v é chamado ancestral de w, e w é descendente</p><p>de v. Se v ≠ w, v é ancestral próprio de w, e w é descendente próprio de v. Se (v, w)</p><p>é uma aresta de T e v é ancestral de w, então, v é pai de w, e w é filho de v. Dois</p><p>vértices que possuem o mesmo pai são chamados de irmãos. Assim, a raiz de uma</p><p>árvore não possui pai, e todo vértice que não é raiz tem exatamente um pai.</p><p>Um vértice folha não possui filhos. O nível de um vértice v, denotado por nível (v),</p><p>é o número de vértices do caminho entre a raiz e v. Assim, se r é raiz de uma árvore</p><p>T, nível (r) = 1. Se dois vértices são irmãos, então, possuem o mesmo nível. A altura</p><p>da árvore T é o valor máximo de nível (v) para todo vértice v ∈ T.</p><p>Introdução ao estudo dos grafos 21</p><p>O grafo da Figura 21 é uma árvore, pois é um grafo ací-</p><p>clico e conexo. Os vértices v3, v7, v6 e v8 possuem grau ≤ 1,</p><p>portanto, são vértices folha. Já os vértices v1, v2, v4 e v5 são</p><p>vértices interiores. Como essa árvore possui oito vértices,</p><p>ela também conta com exatamente sete arestas.</p><p>Pode-se escolher o vértice v2 para ser a raiz dessa árvore,</p><p>chamando-a, portanto, de árvore de enraizada. Assim, diz-se</p><p>que v4 é ancestral de v8, pois está no caminho entre a raiz (v2) e</p><p>v8. O vértice v8 também é conhecido como descendente de v4.</p><p>Já o vértice v4 é pai dos vértices v5 e v6, pois existem ares-</p><p>tas (v4, v5) e (v4, v6), sendo v4 ancestral de v5 e de v6. Os vérti-</p><p>ces v5 e v6, portanto, são filhos de v4. Já os vértices v6 e v5, por</p><p>possuírem o mesmo pai, são irmãos.</p><p>O valor de nível (v2), por ser a raiz, é um. O nível (v6) é</p><p>três, pois tem-se três arestas entre a raiz (v2) e v6. A altura da árvore da Figura 21 é</p><p>três, pois dentro todos os vértices v8 têm valor de nível (v8) = 4.</p><p>v4</p><p>v6</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>v7</p><p>Figura 21</p><p>Árvore</p><p>Fonte: Elaborada pelo autor.</p><p>v8</p><p>1.5 Isomorfismo</p><p>Vídeo Como foi visto, é comum referir-se a um grafo por meio de sua representação</p><p>gráfica ou geométrica. Dessa forma, dois grafos são isomorfos entre si se suas re-</p><p>presentações geométricas se referem ao mesmo grafo. De outra forma, dois grafos</p><p>são isomorfos entre si se existe correspondência entre seus vértices e suas arestas,</p><p>preservando as adjacências entre os vértices.</p><p>Assim, dados dois grafos G1 = (V1, A1) e G2 = (V2, A2), tal que |V1| = |V2| = n,</p><p>ambos são isomorfos se existe uma função unívoca (com somente uma correspon-</p><p>dência) f : V1 → V2, tal que (v, w) ∈ A1 se, e somente se, (f (v), f (w)) ∈ A2 para todo</p><p>v, w ∈ V11 (RODRIGUES, 2014).</p><p>Figura 22</p><p>Grafos isomorfos entre si</p><p>v3</p><p>v2</p><p>v1</p><p>v4</p><p>G1</p><p>a4</p><p>a3</p><p>a2</p><p>a1</p><p>G2</p><p>Fonte: Elaborada pelo autor.</p><p>22 Teoria dos Grafos</p><p>Na Figura 22, os dois grafos G1 = (V1, A1) e G2 = (V2, A2) são isomorfos entre si, pois:</p><p>V1 = {v1, v2, v3, v4}</p><p>A1 = {(v2, v3), (v1, v2), (v4, v2), (v1, v4)}</p><p>V2 = {a1, a2, a3, a4}</p><p>A2 = {(a1, a4), (a1, a2), (a1,</p><p>a3), (a3, a2)}</p><p>|V1| = |V2| = 4</p><p>f : V1 → V2 tal que:</p><p>• f (v1) = a3</p><p>• f (v2) = a1</p><p>• f (v3) = a4</p><p>• f (v4) = a2</p><p>Assim como as arestas são preservadas da seguinte forma:</p><p>(v2, v3) = (a1, a4)</p><p>(v1, v2) = (a1, a3)</p><p>(v4, v2) = (a1, a2)</p><p>(v1, v4) = (a3, a2)</p><p>Uma das maneiras de se caracterizar o isomorfismo entre grafos é usando o</p><p>Teorema de Whitney, que se baseia no conceito de grafos linha e é formulado da</p><p>seguinte forma: dois grafos conexos G e H são isomorfos entre si se, e somente se,</p><p>seus grafos linha L (G) e L (H) são isomorfos. Para esse teorema, tem-se duas exce-</p><p>ções, a saber: K3 (grafo completo com três vértices) e K1,3 (grafo bipartido completo),</p><p>pois não são isomorfos, mas seus grafos linha, L (K3) e L (K1,3), são.</p><p>Para entender esse teorema, deve-se primeiramente definir um grafo linha. O</p><p>grafo linha de G, denotado por L (G) = (V’, A’), é o grafo em que seus vértices (V’) são</p><p>as arestas de G, e existe aresta ab ∈ A’ em L (G) se a e b possuírem um vértice em</p><p>comum em G.</p><p>Por exemplo, observe a figura a seguir.</p><p>Figura 23</p><p>Grafo G</p><p>v2</p><p>v1</p><p>v4</p><p>v3</p><p>a2</p><p>a3</p><p>a4</p><p>a1</p><p>Fonte: Elaborada pelo autor.</p><p>Para encontrar o grafo linha do grafo G, L (G), é preciso seguir os passos:</p><p>1. Encontrar os vértices de L (G); cada aresta de G é representada por um vértice</p><p>em L (G), conforme a Figura 24.</p><p>Introdução ao estudo dos grafos 23</p><p>Figura 24</p><p>Vértices de L (G) que são as arestas de G</p><p>v2</p><p>v1</p><p>v4</p><p>v3</p><p>a2</p><p>a3</p><p>a1</p><p>a1</p><p>a3</p><p>a2</p><p>a4</p><p>a4</p><p>Fonte: Elaborada pelo autor.</p><p>2. Encontrar o primeiro vértice de L (G); como a3 e a2 possuem o vértice v3 em</p><p>comum, adiciona-se uma aresta entre a3 e a2 em L (G), conforme a Figura 25.</p><p>Figura 25</p><p>Primeiro vértice de L (G)</p><p>v2</p><p>v1</p><p>v4</p><p>v3</p><p>a2</p><p>a3</p><p>a4</p><p>a1</p><p>a1</p><p>a3</p><p>a2</p><p>a4</p><p>Fonte: Elaborada pelo autor.</p><p>3. Encontrar o segundo vértice de L (G); como a4 e a3 possuem o vértice v2 em</p><p>comum, adiciona-se uma aresta entre a4 e a3 em L (G), conforme a Figura 26.</p><p>Figura 26</p><p>Segundo vértice de L (G)</p><p>v2</p><p>v1</p><p>v4</p><p>v3</p><p>a2</p><p>a3</p><p>a4</p><p>a1</p><p>a1</p><p>a3</p><p>a2</p><p>a4</p><p>Fonte: Elaborada pelo autor.</p><p>24 Teoria dos Grafos</p><p>4. Encontrar o terceiro vértice de L (G); como a1 e a2 possuem o vértice v4 em</p><p>comum, adiciona-se uma aresta entre a1 e a2 em L (G), conforme a Figura 27.</p><p>Figura 27</p><p>Terceiro vértice de L (G)</p><p>v2</p><p>v1</p><p>v4</p><p>v3</p><p>a2</p><p>a3</p><p>a4</p><p>a1</p><p>a1</p><p>a3</p><p>a2</p><p>a4</p><p>Fonte: Elaborada pelo autor.</p><p>5. Encontrar o quarto vértice de L (G); como a1 e a4 possuem o vértice v1 em</p><p>comum, adiciona-se uma aresta entre a1 e a4 em L (G) a3, conforme a Figura 28.</p><p>Figura 28</p><p>Quarto e último vértice de L (G)</p><p>a3</p><p>a1</p><p>a4</p><p>a2</p><p>v2</p><p>v1</p><p>v4</p><p>v3</p><p>a2</p><p>a3</p><p>a4</p><p>a1</p><p>Fonte: Elaborada pelo autor.</p><p>6. Por fim, o grafo L (G) é o grafo representado pela Figura 29.</p><p>a3</p><p>a1</p><p>a4</p><p>a2</p><p>Figura 29</p><p>Grafo L(G)</p><p>Fonte: Elaborada pelo autor.</p><p>Desse modo, pelo Teorema de Whitney, dois grafos G e H são isomorfos se, e</p><p>somente se, L (G) e L (H) são isomorfos. Usando o exemplo da Figura 22, tem-se os</p><p>grafos linha de G1 e G2 representados na Figura 29.</p><p>Introdução ao estudo dos grafos 25</p><p>Seja V (L (G1)) e V (L (G2)) o conjunto de vértices de L (G1) e L (G2), respectivamente.</p><p>Claramente, os grafos L (G1) e L (G2) são isomorfos, pois conseguem uma função</p><p>f : V (L (G1)) → V (L (G2)), tal que:</p><p>f (a1) = e2</p><p>f (a2) = e4</p><p>f (a3) = e1</p><p>f (a4) = a3</p><p>Tal que:</p><p>(a1, a2) = (e2, e4)</p><p>(a2, a4) = (e4, e3)</p><p>(a3, a4) = (e1, e3)</p><p>(a1, a4) = (e2, e3)</p><p>(a3, a2) = (e1, e4)</p><p>Portanto, G1 e G2 são isomorfos.</p><p>Figura 30</p><p>Grafos L (G1) e L (G2)</p><p>a1</p><p>a3</p><p>a2</p><p>a4</p><p>L (G1)</p><p>v2</p><p>v3</p><p>v4</p><p>v1</p><p>a1</p><p>a2a4</p><p>a3</p><p>G1</p><p>L (G2)</p><p>e1</p><p>e3</p><p>e2</p><p>e4</p><p>e2</p><p>e3</p><p>e1</p><p>e4</p><p>a3</p><p>a4</p><p>a2</p><p>a1</p><p>G2Fonte: Elaborada pelo autor.</p><p>Os grafos G3 e G4 da Figura 31 possuem o mesmo número de vértices e o mes-</p><p>mo número de arestas, mas não são isomorfos.</p><p>26 Teoria dos Grafos</p><p>v1</p><p>a1</p><p>a3</p><p>a4</p><p>a2</p><p>v4</p><p>v2 v3</p><p>G3</p><p>b2</p><p>G4</p><p>b1 b3</p><p>b4</p><p>w1</p><p>w2 w4</p><p>w3</p><p>Figura 31</p><p>Grafos G3 e G4</p><p>Fonte: Elaborada pelo autor.</p><p>Ao representar seus grafos linha, obtém-se L (G3) e L (G4), conforme a Figura 32.</p><p>v1</p><p>a1</p><p>a3</p><p>a4</p><p>a2</p><p>v4</p><p>v2 v3</p><p>G3</p><p>a1</p><p>a3</p><p>a2</p><p>a4</p><p>L(G3)</p><p>Figura 32</p><p>Grafos linha L (G3) e L (G4)</p><p>L(G4)</p><p>b2</p><p>G4</p><p>b1 b3</p><p>b4</p><p>w1</p><p>w2 w4</p><p>w3</p><p>b1</p><p>b3</p><p>b2</p><p>b4</p><p>Fonte: Elaborada pelo autor.</p><p>Claramente, L (G3) e L (G4) não são isomorfos, pois não possuem o mesmo nú-</p><p>mero de arestas.</p><p>Uma solução algorítmica para isomorfismo é analisar cada uma das n! permu-</p><p>tações da função que define o isomorfismo (buscar todas as funções possíveis). O</p><p>problema é que, no pior caso, esse algoritmo necessita de n! passos, sabidamente</p><p>intratáveis. Hoje, não se conhece um algoritmo eficiente para o problema geral do</p><p>isomorfismo em grafos.</p><p>Introdução ao estudo dos grafos 27</p><p>1.6 Representação computacional</p><p>Vídeo Um grafo G = (V, A) é dito esparso se |A| é muito menor que |V|2. Se |A| está</p><p>próximo de |V|2 é dito que o grafo é denso.</p><p>Tem-se basicamente três formas padrão de se representar computacionalmente</p><p>um grafo: lista de adjacências, matriz de adjacências e matriz de incidências.</p><p>Na lista de adjacências armazena-se uma lista para cada vértice, e, em cada</p><p>lista, referenciam-se os vértices que são adjacentes.</p><p>v3</p><p>v1</p><p>v4</p><p>v5</p><p>v2</p><p>v2</p><p>v1</p><p>v2</p><p>v2</p><p>v3</p><p>v5</p><p>v4</p><p>v4</p><p>v2</p><p>v2</p><p>v1</p><p>v3</p><p>v4</p><p>v5</p><p>v5</p><p>Fonte: Elaborada pelo autor.</p><p>Na Figura 33, o vértice v2 é representado por uma posição na lista. Esta possui</p><p>uma lista de todos os vértices adjacentes a v2, no caso, v1, v3, v4 e v5.</p><p>Se o grafo for orientado (digrafo), a representação pode ser a mesma, como vis-</p><p>to na Figura 34. A diferença é que a vizinhança representada na lista é dada pelos</p><p>vértices atingíveis por arestas de saída.</p><p>v3</p><p>v2</p><p>v1</p><p>v4</p><p>v5</p><p>v1</p><p>v2</p><p>v2</p><p>v4</p><p>v4</p><p>v3</p><p>v4</p><p>v5</p><p>v3</p><p>v5</p><p>v4</p><p>Figura 34</p><p>Lista de adjacências em grafo orientado</p><p>Fonte: Elaborada pelo autor.</p><p>Ao se analisar as listas de adjacências apresentadas, percebe-se que a soma dos</p><p>comprimentos de todas as listas de adjacências para um grafo não orientado é o</p><p>dobro do número de arestas, 2 * |A|, visto que cada aresta incide em dois vértices</p><p>e que, portanto, precisa ser representada duas vezes. Já para o grafo orientado,</p><p>essa soma é o número exato de arestas, isto é, |A|.</p><p>Na matriz de adjacências representa-se a estrutura do grafo G = (V, A) como</p><p>uma matriz com dimensões |V| x |V|, em que cada posição aij é dada por:</p><p>Figura 33</p><p>Lista de</p><p>adjacências</p><p>28 Teoria dos Grafos</p><p>1, se a aresta (i, j) ∈ A</p><p>0, caso contrárioaij=</p><p>Com essa representação, consultar se uma aresta faz parte do gráfico é feito em</p><p>tempo constante.</p><p>v1 v2 v3 v4 v5</p><p>v1 0 1 0 0 0</p><p>v2 1 0 1 1 1</p><p>v3 0 1 0 0 0</p><p>v4 0 1 0 0 1</p><p>v5 0 1 0 1 0</p><p>v3</p><p>v1</p><p>v4</p><p>v5</p><p>v2</p><p>Figura 35</p><p>Matriz de adjacências</p><p>Fonte: Elaborada pelo autor.</p><p>Na Figura 35 tem-se a matriz de adjacências representada no grafo. A quantida-</p><p>de de memória necessária para compor a matriz tem limite assintótico restrito no</p><p>quadrado do número de vértices, portanto, Θ (V2).</p><p>Como o grafo é não direcionado, percebe-se que a matriz é igual à sua trans-</p><p>posta, representando-se, portanto, somente os elementos abaixo da diagonal</p><p>principal.</p><p>v3</p><p>v2</p><p>v1</p><p>v4</p><p>v5</p><p>Figura 36</p><p>Matriz de adjacências de um grafo orientado</p><p>Fonte: Elaborada pelo autor.</p><p>v1 v2 v3 v4 v5</p><p>v1 0 1 0 0 0</p><p>v2 0 0 1 1 0</p><p>v3 0 0 0 0 0</p><p>v4 0 0 0 1 1</p><p>v5 0 1 0 0 0</p><p>A Figura 36 apresenta a matriz de adjacências de um grafo orientado (digrafo).</p><p>Percebe-se que, como as arestas são orientadas, a matriz não é igual à sua trans-</p><p>posta, pois uma aresta (v, w) não é a mesma que (w, v). Essa representação é ideal</p><p>para grafos densos.</p><p>Outra forma matricial de representação de grafos é a matriz de incidências.</p><p>Para o grafo G = (V, A), define-se como uma matriz com dimensões |V| x |A|, em</p><p>que cada posição aij é dada por:</p><p>1, se a aresta j incide no vértice i</p><p>0, caso contrárioaij=</p><p>Introdução ao estudo dos grafos 29</p><p>v3</p><p>v2</p><p>a6</p><p>a5</p><p>a4</p><p>a2</p><p>a3</p><p>a1</p><p>v4</p><p>v1 v5</p><p>Figura 37</p><p>Matriz de incidências</p><p>a1 a2 a3 a4 a5 a6</p><p>v1 0 0 0 0 0 1</p><p>v2 1 1 1 0 0 1</p><p>v3 0 0 1 0 0 0</p><p>v4 1 0 0 1 1 0</p><p>v5 0 1 0 1 0 0</p><p>Fonte: Elaborada pelo autor.</p><p>A Figura 37 mostra a matriz de incidências de um grafo. Cada coluna represen-</p><p>ta uma aresta e cada linha um vértice. As arestas contam com duas incidências,</p><p>exceto a aresta a5, que é um laço. Para representar a matriz de incidências de um</p><p>digrafo, pode-se optar pela seguinte definição:</p><p>1, se a aresta j incide no vértice i</p><p>–1, se a aresta j sai do vértice i</p><p>0, caso contrário</p><p>aij=</p><p>Essa representação pode ser observada na Figura 38.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>a6</p><p>a5</p><p>a4</p><p>a2</p><p>a3</p><p>a1</p><p>v1</p><p>Figura 38</p><p>Matriz de incidências em digrafo</p><p>Fonte: Elaborada pelo autor.</p><p>a1 a2 a3 a4 a5 a6</p><p>v1 0 0 0 0 0 –1</p><p>v2 –1 1 –1 0 0 1</p><p>v3 0 0 1 0 0 0</p><p>v4 1 0 0 –1 1 0</p><p>v5 0 –1 0 1 0 0</p><p>1.7 Aplicações dos grafos</p><p>Vídeo Muitos problemas do mundo real, para serem resolvidos, são transformados</p><p>em problemas de grafos. Essa comutação pode fornecer um ponto de vista diferen-</p><p>te sobre o problema, tornando-o mais simples e abrindo um leque de técnicas para</p><p>a solução. Um exemplo disso foi o problema do caixeiro-viajante – ou TSP (Travelling</p><p>Salesman Problem) –, no qual tentava-se resolver como esse profissional, que preci-</p><p>sava visitar várias cidades, poderia fazer isso para efetuar suas vendas. As cidades</p><p>eram conectadas por estradas ou rodovias, sempre aos pares. Para maximizar seus</p><p>30 Teoria dos Grafos</p><p>lucros, o caixeiro-viajante devia visitar todas as cidades somente uma vez e pela</p><p>rota mais curta. Ou seja, ele precisava de um caminho ótimo passando por todas</p><p>as cidades, sem repeti-las.</p><p>O TSP é um problema NP-Completo, isto é, faz parte da classe de problemas</p><p>mais difíceis em NP, e NP é a classe de problemas que podem ser resolvidos em</p><p>tempo polinomial, em uma Máquina de Turing Não Determinística. Atualmente, as</p><p>soluções para os problemas NP-Completos levam um tempo exponencial em rela-</p><p>ção à entrada. Por exemplo, no caso do TSP, a solução mais simples é enumerar</p><p>todas as rotas possíveis e escolher. No caso de n cidades, havendo estradas entre</p><p>todas elas, deve-se efetuar (n – 1)! escolhas.</p><p>Suponha um computador que pode efetuar 1 trilhão de adições por segundo</p><p>(1012), isto é, 1 teraflop. Para um problema com cinco cidades, n = 5, a máquina é capaz</p><p>de avaliar 1012</p><p>4</p><p>= 250 bilhões de rotas por segundo. Como ele precisa calcular 4! rotas,</p><p>demorará 4!/(250 bilhões) = 0,000000000096 segundos, um tempo insignificante.</p><p>Efetuando os mesmos cálculos para outras quantidades de cidades, tem-se o</p><p>Quadro 1 a seguir.</p><p>Quadro 1</p><p>Tempo de execução da solução simples para o TSP.</p><p>n Rotas/segundo (n-1)! Tempo total</p><p>5 250.000.000.000 24 0,000000000096 s</p><p>10 110.000.000.000 362.880 0,00000329891 s</p><p>15 71.000.000.000 87.178.291.200 1,22786325633 s</p><p>20 53.000.000.000 1,216451 * 1017 26,56 dias</p><p>25 42.000.000.000 6,204484 * 1023 468.435,470 anos</p><p>100 10.000.000.000 9,332621 * 10155 2,9593 * 10138 anos</p><p>399 2.500.000.000 4,0121881 * 10863 5.089026 * 10846 anos</p><p>Fonte: Elaborado pelo autor.</p><p>Levando em consideração que se estima a idade do universo em 14 bilhões de</p><p>anos, ou seja, 1,4 * 1010 anos, o tempo de cálculo de todas as rotas para um esta-</p><p>do do tamanho do Paraná, com 399 cidades, usando um computador que efetua</p><p>1 trilhão de adições por segundo, é completamente inviável.</p><p>Assim, a solução de encontrar todas as rotas e verificar a melhor não pode ser</p><p>aplicada. Quando mapeado para grafos, esse problema é enunciado como buscar</p><p>um circuito hamiltoniano ótimo em um grafo valorado. Assim, resolver o problema</p><p>de rotas é resolver um problema em grafos.</p><p>No artigo Algumas aplicações da teoria dos grafos, dos autores Pereira e Câmara, publicado</p><p>em Famat em Revista, os conceitos básicos dessa teoria são revisitados e algumas aplicações</p><p>são apresentadas, como é o caso do problema do caixeiro-viajante, enunciado sobre algumas</p><p>cidades do estado de Minas Gerais. Também, são apresentados alguns algoritmos para sua</p><p>solução.</p><p>Acesso em: 14 abr. 2020.</p><p>http://www.pucrs.br/ciencias/viali/graduacao/po_2/literatura/grafos/artigos/Famat_artigo_04.pdf</p><p>Artigo</p><p>http://www.pucrs.br/ciencias/viali/graduacao/po_2/literatura/grafos/artigos/Famat_artigo_04.pdf</p><p>Introdução ao estudo dos grafos 31</p><p>Outra problematização que pode ser mapeada para grafos é a robustez da ma-</p><p>lha elétrica para distribuição de energia. A malha elétrica é formada por torres e</p><p>linhas de transmissão. Para saber quantas linhas no mínimo precisam falhar para</p><p>que haja um apagão, isto é, para que parte do sistema fique desconectado, pode-se</p><p>mapear as torres como vértices e as linhas de transmissão como arestas. Assim, o</p><p>problema do apagão se transforma em descobrir o corte mínimo em um grafo, ou</p><p>seja, o conjunto de arestas que, quando retiradas do grafo, interrompe o fluxo de</p><p>um vértice a outro (Figura 39).</p><p>t2</p><p>t1</p><p>t4</p><p>t5</p><p>t3</p><p>t6</p><p>t7</p><p>t8</p><p>t9</p><p>Figura 39</p><p>Malha elétrica</p><p>Fonte: Elaborada pelo autor.</p><p>A Figura 39 apresenta um exemplo de torres e linhas de transmis-</p><p>são. Partindo de t1 até t9, por exemplo, quantas arestas no mínimo</p><p>precisam ser retiradas para que t9 sofra um apagão?</p><p>O problema de alocação de professores e disciplinas também</p><p>pode ser representado como um grafo. Sejam n professores e m</p><p>disciplinas, assumindo que cada professor pode ministrar algumas</p><p>disciplinas, mas que só poderá ofertar uma disciplina no semestre, é</p><p>possível que todas as disciplinas sejam ofertadas simultaneamente?</p><p>Qual o maior número de disciplinas que pode ser ofertado?</p><p>A Figura 40 mostra a representação do problema de alocação de</p><p>professores e disciplinas. Pode-se observar que esse é um grafo bi-</p><p>partido e que, portanto, definições e algoritmos referentes a esse</p><p>tipo de grafo são úteis para a solução do problema.</p><p>Outro problema interessante é o famoso lema do aperto de</p><p>mão, que é consequência do teorema do grau dos grafos, apresen-</p><p>tado na Seção 1.4. Informalmente, em qualquer festa contendo um</p><p>grupo de pessoas, sendo que algumas se cumprimentam (apertam</p><p>as mãos), o número de pessoas que apertam um número ímpar de</p><p>mãos sempre é par.</p><p>Seja o problema mapeado como um grafo, em que os vértices são</p><p>pessoas e uma aresta indica que uma pessoa aperta a mão de outra,</p><p>P1</p><p>P2</p><p>P3</p><p>P4</p><p>P5</p><p>d1</p><p>d2</p><p>d3</p><p>d4</p><p>d5</p><p>Professores Disciplinas</p><p>Figura 40</p><p>Professores X disciplinas</p><p>Fonte: Elaborada pelo autor.</p><p>32 Teoria dos Grafos</p><p>a quantidade de vezes que uma pessoa aperta a mão de outra é o grau do vértice.</p><p>Suponha que esse grafo tenha um número ímpar de vértices de grau ímpar. Assim,</p><p>a soma desses graus é ímpar. Sabendo-se que a soma dos graus dos vértices de</p><p>grau par sempre é par, então, a soma dos graus de todos os vértices, nesse caso,</p><p>é ímpar. Isso contradiz o teorema que indica que a soma dos graus dos vértices de</p><p>um grafo é o dobro do número de arestas, logo, um número par. Portanto, o núme-</p><p>ro de vértices de grau ímpar deve obrigatoriamente ser par.</p><p>CONSIDERAÇÕES FINAIS</p><p>Este capítulo apresentou a história dos grafos, mostrando a sua origem, que é mais</p><p>antiga do que os computadores conhecidos hoje em dia. Mesmo sendo uma teoria</p><p>ancestral, os grafos até hoje são usados para mapear problemas do mundo a serem</p><p>resolvidos com algoritmos computacionais.</p><p>Também foi possível observar os vários conceitos complexos necessários para o</p><p>estudo dos grafos. Convém ressaltar que essa teoria, por se tratar de um ramo da</p><p>matemática, com aplicações em várias áreas, é defina por uma notação formal a ser</p><p>absorvida. Esse formalismo é necessário para que o desenvolvimento de conceitos</p><p>avançados e algoritmos possa ser feito de maneira correta.</p><p>ATIVIDADES</p><p>1. Observe o problema das pontes de Königsberg, conforme a figura a seguir.</p><p>Se</p><p>rg</p><p>ey</p><p>M</p><p>er</p><p>ku</p><p>lo</p><p>v/</p><p>Sh</p><p>ut</p><p>te</p><p>rs</p><p>to</p><p>ck</p><p>Esse problema é mapeado pelo seguinte grafo:</p><p>v4</p><p>v1</p><p>v2</p><p>v3</p><p>Introdução ao estudo dos grafos 33</p><p>Sabendo que não é possível partir de qualquer ponto e passar por todas as pontes</p><p>somente uma vez, retornando ao ponto de partida, uma vez que o grafo resultante</p><p>não é euleriano, construa mais algumas pontes de modo que o grafo torne-se euleria-</p><p>no e seja possível passar por cada aresta somente uma vez, partindo e chegando no</p><p>mesmo ponto.</p><p>2. Construa a representação geométrica do grafo G = (V, A), tal que:</p><p>V = {1, 2, 3, 4, 5, 6}</p><p>A = {(1,3), (1,4), (1,5), (2,3), (2,4), (2,5),</p><p>(3,5), (4,5)}</p><p>3. Construa a matriz de adjacências do grafo da Questão 2.</p><p>4. Verifique se o seguinte grafo é bipartido. Dê os dois conjuntos de vértices</p><p>característicos.</p><p>32</p><p>4</p><p>5</p><p>1</p><p>6</p><p>5. Desenhe um possível grafo que contenha vértices de grau 5, 2, 2, 2, 2, 1. Quantas</p><p>arestas esse grafo possui?</p><p>REFERÊNCIAS</p><p>BOAVENTURA NETTO, P. O.; JURKIEWICZ, S. Grafos: introdução e prática. São Paulo: Blucher, 2009.</p><p>EULER, L. Solutio problematis ad geometriam situs pertinentis. Commentarii Academiae Scientiarum</p><p>Petropolitanae, v. 8, p. 128-140, 1736.</p><p>RODRIGUES, E. J. Um Algoritmo para o Problema do Isomorfismo de Grafos. São Paulo, 2014. Dissertação</p><p>(Mestrado em Ciência da Computação) – Universidade Federal do ABC. Disponível em: http://biblioteca.</p><p>ufabc.edu.br/index.php?codigo_sophia=75394 Acesso em: 14 abr. 2020.</p><p>SZWARCFITER, J. L. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.</p><p>34 Teoria dos Grafos</p><p>Conectividade</p><p>2</p><p>A conectividade em grafos é um aspecto muito importante no estudo da</p><p>teoria de grafos, pois muitos problemas podem ser mapeados e analisados</p><p>através de uma sequência de arestas. Para isso, deve-se conceituar grafos co-</p><p>nexos e desconexos, bem quanto suas componentes conexas. Para caminhar</p><p>em um grafo, tanto orientado como não orientado, faz-se necessária a aplicação</p><p>de conceitos, como caminhos e circuitos. E destes conceitos surgem os grafos</p><p>eulerianos e hamiltonianos. Quando se trabalha com componentes conexas de</p><p>grafos também se faz necessário o estudo de subgrafos e suas denominações.</p><p>Assim, neste capítulo será apresentada, na Seção 2.1, a teoria sobre grafos</p><p>conexos e desconexos, bem como a definição de componentes conexas e suas</p><p>implicações. Na Seção 2.2 são apresentadas noções sobre caminhos e circuitos,</p><p>bem como a formalização de grafos conexos e componentes conexas. Também</p><p>são apresentados formalmente os conceitos de grafos eulerianos e hamiltonia-</p><p>nos. Na Seção 2.3 são mostrados os subgrafos e seus usos. Os conceitos de vér-</p><p>tice de corte, arestas de corte e suas aplicações são apresentados na Seção 2.4.</p><p>2.1 Grafos conexos e componentes</p><p>Vídeo Um grafo conexo é aquele em que é possível estabelecer um caminho desde um</p><p>vértice a outro, passando pelas arestas; caso um grafo não atenda esta condição, é</p><p>chamado grafo desconexo (BOAVENTURA NETTO). Por exemplo, na Figura 1, o vértice</p><p>v3 faz parte do grafo, mas não tem aresta com nenhum outro vértice e, na Figura 2, os</p><p>vértices v3 e v5 possuem aresta entre si, mas não possuem aresta com a outra parte</p><p>do grafo, caracterizando, portanto, dois grafos desconexos.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 1</p><p>Grafo desconexo com aresta desconexa</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 2</p><p>Grafo desconexo com duas componentes conexas</p><p>Fonte: Elaborada pelo autor.</p><p>Conectividade 35</p><p>Denominam-se componentes conexas do grafo G todos os subgrafos maximais</p><p>conexos de G, isto é, subgrafos conexos que não estão estritamente contidos em</p><p>outros subgrafos conexos. Por exemplo, o grafo G (Figura 3) possui três compo-</p><p>nentes conexas, G’, G’’, G’’’, a saber:</p><p>G’ = (V’, A’)</p><p>• V’ = {v1, v2, v3}</p><p>• A’ = {(v1, v2), (v2, v3), (v3, v4)}</p><p>G’’ = (V’’, A’’)</p><p>• V’’ = {v4, v5, v6, v7}</p><p>• A’’ = {(v4, v5), (v5, v6), (v6, v4), (v7, v6)}</p><p>G’’’ = (V’’’, A’’’)</p><p>• V’’’ = {v8}</p><p>• A’’’ = {}</p><p>v4</p><p>v5</p><p>v6</p><p>v7</p><p>v8</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 3</p><p>Grafo G com três componen-</p><p>tes conexas</p><p>Fonte: Elaborada pelo autor.</p><p>Para ser uma componente conexa, o subgrafo deve ser maximal, ou seja, não</p><p>deve estar contido em outro subgrafo. No exemplo da Figura 3, o subgrafo formado</p><p>pelos vértices v5 e v6, juntamente com a aresta (v5, v6), não é uma componente cone-</p><p>xa, pois está contido no subgrafo G’’.</p><p>Um grafo é chamado totalmente desconexo se todos os seus vértices pos-</p><p>suem grau zero, como na Figura 4.</p><p>v3v2v1</p><p>Figura 4</p><p>Grafo Totalmente Desconexo</p><p>Fonte: Elaborada pelo autor.</p><p>Os conceitos de conectividade, como componentes conexas, são importantes</p><p>para o entendimento de assuntos como caminhos e circuitos, cortes, árvores e ou-</p><p>tros. Em muitos problemas mapeados para grafos, a conectividade é discutida e</p><p>calculada, o que torna esses conceitos imprescindíveis.</p><p>Um subconjunto X’ de um con-</p><p>junto X é dito maximal em relação</p><p>a alguma propriedade, se X não</p><p>for subconjunto de nenhum outro</p><p>subconjunto de X que possua</p><p>aquela propriedade. Cuidado para</p><p>não confundir maximal com</p><p>máximo. Maximal diz respeito</p><p>à pertinência e máximo, à cardi-</p><p>nalidade (número de elementos)</p><p>(GOLDBARG; GOLDBARG, 2012).</p><p>No caso aqui, uma componente</p><p>conexa é um subgrafo maximal,</p><p>G’, isto é, um subgrafo para o qual</p><p>não existe outro subgrafo H’, tal</p><p>que G’ está contido em H’.</p><p>Saiba mais</p><p>36 Teoria dos Grafos</p><p>2.2 Caminhos e circuitos</p><p>Vídeo O conceito de caminho é muito usado em vários problemas mapeados para grafos.</p><p>Um desses problemas é descobrir se existe um caminho entre um vértice e outro; se</p><p>existe um conjunto de arestas que, quando visitadas em sequência, levam do ponto</p><p>origem ao ponto destino.</p><p>Segundo Szwarcfiter (2018), um caminho ou passeio em um grafo G = (V, A) é</p><p>uma sequência de vértices v1,...,vk, tal que vi ∈ V, (vi, vi+1) ∈ A, 1 ≤ i < k. Esse caminho</p><p>é formado pelas seguintes arestas: (v1, v2), (v2, v3), (v3, v4),...(vk-1, vk).</p><p>v3</p><p>v2v1</p><p>v4</p><p>v6</p><p>v5</p><p>Figura 5</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>Por exemplo, o grafo G da Figura 5 possui, pelo menos, um caminho entre v4 e</p><p>v6, formado pelas arestas (v4, v2), (v2, v5), (v5, v6). Perceba que, a partir da segunda,</p><p>cada aresta é adjacente à anterior.</p><p>Um trajeto é definido como um caminho sem arestas repetidas. Um caminho</p><p>simples é um caminho que não possui vértices repetidos. O caminho entre v4 e v6</p><p>formado pelas arestas (v4, v2), (v2, v5), (v5, v6) sobre o grafo G (Figura 5) é um trajeto,</p><p>pois não repete arestas. Também é um caminho simples, pois não repete vértices.</p><p>Já o caminho formado pelas arestas (v4, v1), (v1, v2), (v2, v4), (v4, v6) não é um caminho</p><p>simples, pois repete o vértice v4. E o caminho formado pelas arestas (v4, v2), (v2, v1),</p><p>(v1, v4), (v4, v2), (v2, v5), (v5, v6) não é um trajeto, pois repete a aresta (v4, v2) (ou (v2, v4),</p><p>já que é um grafo não dirigido).</p><p>O primeiro vértice v1 que faz parte do caminho é chamado origem, e seu último</p><p>vértice vk é conhecido como término. Assim, diz-se que esse caminho vai de v1 a vk.</p><p>No exemplo apresentado anteriormente, o vértice v4 é a origem do caminho e v6 o</p><p>seu término.</p><p>Com a definição de caminho, é possível formular que um grafo é conexo quan-</p><p>do existe caminho entre cada par de vértices e, caso contrário, é desconexo. O ta-</p><p>manho de um caminho é dado pelo número de arestas que fazem parte dele. Se</p><p>o caminho é formado por k vértices, então possui pelo menos k – 1 arestas e o valor</p><p>k – 1 é o tamanho do caminho. Se o caminho é simples (sem vértices repetidos) en-</p><p>tão seu comprimento é exatamente k – 1. Assim, a distância entre dois vértices</p><p>pode ser medida pelo tamanho do menor caminho entre eles (FEOFILOFF, 2020).</p><p>No exemplo aplicado ao grafo G (Figura 5), o caminho simples (v4, v2), (v2, v5), (v5, v6)</p><p>é formado por quatro vértices e tem tamanho três.</p><p>Conectividade 37</p><p>É definido como ciclo um caminho v1,..., vk, vk+1, de tal forma que v1 = vk+1 e k ≥</p><p>3. Isto é, um ciclo é um caminho que começa e termina no mesmo vértice, desde</p><p>que contenha mais de dois vértices envolvidos. Um ciclo simples ou elementar é</p><p>um ciclo v1,..., vk, vk+1 em que o caminho v1,..., vk é simples, não possui vértices re-</p><p>petidos, exceto o primeiro e último, o que determina ser um ciclo. Se não houver</p><p>ambiguidade, os termos caminho e ciclo são usados denotando caminho simples</p><p>e ciclo simples, respectivamente. Se o ciclo possuir tamanho três, então é chama-</p><p>do triângulo.</p><p>Para o grafo G, da Figura 5, o caminho simples (v4, v2), (v2, v5), (v5, v6), (v6, v4) é um</p><p>ciclo, pois seu início e término são pelo mesmo vértice (v4), e é simples, pois não</p><p>repete vértices. Nesse mesmo grafo, o ciclo (v4, v2), (v2, v1), (v1, v4) é um triângulo,</p><p>pois possui</p><p>tamanho três.</p><p>Se um ciclo puder ser obtido de outro pela permutação circular dos seus vérti-</p><p>ces, então esses ciclos são considerados idênticos. O grafo G (Figura 5) representa</p><p>dois ciclos: (v4, v2), (v2, v1), (v1, v4) e (v2, v1), (v1, v4), (v4, v2). Perceba que ambos os</p><p>ciclos possuem as mesmas arestas e só mudam em relação a sua origem e tér-</p><p>mino. Assim, um é permutação circular do outro, fazendo com que sejam ciclos</p><p>idênticos.</p><p>Todos os conceitos apresentados também são aplicados a digrafos (grafos</p><p>orientados). Nesse caso, um caminho ou passeio em um digrafo D = (V, A) é uma</p><p>sequência de vértices v1,..., vk tal que (vi, vi+1) ∈ A, 1 ≤ i < k. Esse caminho é formado</p><p>pelas seguintes arestas orientadas: (v1, v2), (v2, v3), (v3, v4),…(vk– 1, vk). Convém ressal-</p><p>tar que, por ser um grafo orientado, a aresta (vi, vi+1) indica que o vértice vi+1 é adja-</p><p>cente ao vértice vi, mas a recíproca não é necessariamente verdadeira.</p><p>Por exemplo, na Figura 6, o digrafo D tem um caminho formado pelas seguin-</p><p>tes arestas: (v5, v3), (v3, v1), (v1, v2), (v2, v5). Já a seguinte sequência de arestas: (v3,</p><p>v1), (v1, v4), (v4, v5), (v5, v3) não é um caminho, pois a aresta (v1, v4) não existe, a</p><p>aresta existente é (v4, v1), a ordem importa.</p><p>Figura 6</p><p>Digrafo D com caminho</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>38 Teoria dos Grafos</p><p>Seja o digrafo D = (V, A), se para qualquer par de vértices vi, vj houver caminho</p><p>orientado partindo de vi a vj, e se houver caminho orientado partindo de vj a vi, o</p><p>digrafo é chamado fortemente conexo. Informalmente, qualquer vértice é acessível a</p><p>partir de qualquer outro e essa propriedade pode ser observada no grafo da Figura</p><p>7. Perceba que para qualquer par de vértices vi e vj, há um caminho partindo de vi e</p><p>chegando em vj, e um caminho partindo de vj e chegando em vi.</p><p>Se para o digrafo D = (V, A) e qualquer par de vértices vi, vj, houver caminho</p><p>orientado partindo de vi a vj, mas não houver caminho orientado partindo de vj a vi,</p><p>então o digrafo é chamado unilateralmente conexo. Se o digrafo não for fortemente</p><p>conexo, mas tiver seu grafo subjacente – resultante da retirada das orientações das</p><p>arestas – conexo, então é dito fracamente conexo. O digrafo da Figura 6 não é forte-</p><p>mente conexo, mas seu grafo subjacente (Figura 8) é conexo. Portanto, o digrafo da</p><p>Figura 6 é fracamente conexo.</p><p>Um caminho em um grafo G que contém todos os vértices de G</p><p>somente uma vez é chamado de caminho hamiltoniano. Seja um ci-</p><p>clo v1,..., vk, vk+1 em um grafo G, se o caminho v1,..., vk for hamiltonia-</p><p>no, então o ciclo v1,..., vk, vk+1 é denominado ciclo hamiltoniano. Um</p><p>grafo que contém um ciclo hamiltoniano é um grafo hamiltoniano.</p><p>Se um grafo contiver um caminho hamiltoniano, mas não um ciclo</p><p>hamiltoniano, é um grafo semi-hamiltoniano. Na prática, um grafo</p><p>semi-hamiltoniano se torna hamiltoniano ao acrescentar uma ares-</p><p>ta entre a origem e o término do caminho hamiltoniano.</p><p>As definições de caminho, ciclo e grafo hamiltoniano também se</p><p>aplicam a digrafos (grafos orientados). Um caminho orientado em</p><p>um digrafo é um caminho hamiltoniano, se contiver todos os vérti-</p><p>ces do digrafo sem repetição de vértices. Agora, se for um caminho</p><p>hamiltoniano e iniciar e terminar no mesmo vértice, um ciclo orien-</p><p>tado em um digrafo é um ciclo hamiltoniano. Já um digrafo é hamiltoniano se con-</p><p>tiver um ciclo orientado hamiltoniano. Se um digrafo contiver um caminho orientado</p><p>hamiltoniano, o digrafo é semi-hamiltoniano (NICOLETTI; HRUSCHKA JUNIOR,</p><p>2018).</p><p>Como resultado dessa definição, é possível perceber que um grafo completo Kn,</p><p>sendo n ≥ 3, é sempre hamiltoniano. Isso ocorre porque em um grafo completo to-</p><p>dos os n vértices possuem arestas incidentes a todos os demais n – 1</p><p>vértices. Assim, para todo vértice vi, 1 ≤ i ≤ n, existe o seguinte cami-</p><p>nho C = {(v1, v2), (v2, v3), (v3, v4)..., (vn–1, vn)}, que passa por todos os vér-</p><p>tices {v1,..., vn} somente uma vez. Como todos vértices são adjacentes</p><p>aos demais, o vértice vn também é adjacente a v1, assim o caminho</p><p>C adicionando-se a aresta (vn, v1) é um ciclo que passa por todos os</p><p>vértices, portanto, é um ciclo hamiltoniano e o grafo é hamiltoniano.</p><p>Ao se analisar o grafo da Figura 9, percebe-se que o caminho</p><p>(v2, v3), (v3, v5), (v5, v1), (v1, v4) passa por todos os vértices, exata-</p><p>mente uma vez, portanto, é um caminho hamiltoniano. No mes-</p><p>mo grafo, o caminho (v2, v3), (v3, v5), (v5, v1), (v1, v4), (v4, v2) é um ciclo</p><p>Figura 7</p><p>Digrafo fortemente conexo</p><p>Fonte: Elaborada pelo autor.</p><p>v1</p><p>v3</p><p>v2</p><p>Figura 8</p><p>Grafo Subjacente de D</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 9</p><p>Grafo hamiltoniano</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Conectividade 39</p><p>(começa e termina em v2), caracterizando-o, portanto, como um ciclo hamiltonia-</p><p>no e, por conta disso, o grafo é hamiltoniano.</p><p>Se um caminho em um grafo G contém todas as arestas do grafo somente uma</p><p>vez, é chamado de caminho euleriano. Se esse caminho for um ciclo, então é co-</p><p>nhecido como ciclo euleriano. Um grafo que contém um ciclo euleriano é um grafo</p><p>euleriano. Um grafo é semieuleriano se possuir um caminho euleriano, mas não</p><p>um ciclo euleriano. Na prática, um grafo semieuleriano se torna euleriano bastando</p><p>inserir uma aresta entre a origem e o término do caminho euleriano (NICOLETTI;</p><p>HRUSCHKA JUNIOR, 2018).</p><p>Conforme já apresentado, um grafo não orientado é um grafo euleriano se, e</p><p>somente se, todos os seus vértices possuem grau (número de arestas incidentes)</p><p>par. Um grafo é semieuleriano se possuir dois vértices com grau ímpar e todos os</p><p>demais com grau par.</p><p>Observando o grafo da Figura 10, percebe-se que há um caminho passando pelos</p><p>seguintes vértices na sequência (v1, v2, v3, v4, v5, v6, v1, v4, v2, v5, v1) que passa por todas</p><p>as arestas, somente uma vez, sendo, portanto, um caminho euleriano. Como esse</p><p>caminho começa em v1 e termina em v1, é um ciclo euleriano e, consequentemente,</p><p>o grafo é euleriano.</p><p>Os conceitos também se aplicam a digrafos, isto é, se um caminho orientado em</p><p>um digrafo D contém todas as arestas do grafo somente uma vez, então é um ca-</p><p>minho euleriano. Se esse caminho for um ciclo orientado, então é conhecido como</p><p>ciclo euleriano. Um digrafo que contém um ciclo euleriano é chamado de digrafo</p><p>euleriano.</p><p>Para verificar se um digrafo é euleriano há uma condição necessária e suficien-</p><p>te. Um digrafo D = (V, A) é euleriano se, e somente se, for unilateralmente conexo e</p><p>se para todo vértice vi ∈ V, o grau de entrada de vi – denotado como grau+(vi) ou o</p><p>número de vértices que chegam em vi– for igual ao grau de saída de vi – denotado</p><p>como grau– (vi) ou o número de vértices que saem de vi.</p><p>Por exemplo, o digrafo da Figura 11 é euleriano, pois é unilateralmente conexo</p><p>– para cada par de vértices há um caminho orientado entre eles, em algum sentido</p><p>– e para cada vértice, o número de vértices que entram (grau de entrada) é igual ao</p><p>número de vértices que saem (grau de saída).</p><p>No digrafo da Figura 11, um ciclo euleriano é: (v6, v4), (v4, v2), (v2,, v3), (v3, v4), (v4, v5),</p><p>(v5, v3), (v3, v1), (v1, v5), (v5, v2), (v2, v6).</p><p>Um teorema similar existe para verificar se o digrafo possui um caminho eule-</p><p>riano (não um ciclo). Um digrafo D = (V, A) possui um circuito euleriano se, e somen-</p><p>te se, for unilateralmente conexo e se possuir as seguintes condições:</p><p>1. Dois de seus vértices vi e vj são tais que:</p><p>• o grau de entrada de vi é igual ao seu grau de saída mais um, isto é, grau+(vi)</p><p>= 1 + grau–(vi);</p><p>• o grau de saída de vj é igual ao seu grau de entrada mais um, isto é, grau–</p><p>(vj) = 1 + grau+(vj).</p><p>2. Para todos os demais vértices, seus graus de entrada e saída são iguais, isto</p><p>é,</p><p>A</p><p>v ∈ V, grau–(v) = grau+(v).</p><p>Figura 10</p><p>Grafo euleriano</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v6</p><p>v3</p><p>v2</p><p>v5v1 a7</p><p>a9</p><p>a10</p><p>a1 a4</p><p>a8</p><p>a6</p><p>a2</p><p>a5</p><p>a3</p><p>Figura 11</p><p>Digrafo Euleriano</p><p>v2</p><p>v1</p><p>v6</p><p>v3</p><p>v5</p><p>v4</p><p>Fonte: Elaborada pelo autor.</p><p>40 Teoria dos Grafos</p><p>Com essas condições, o caminho euleriano se inicia em vj (o vértice</p><p>com mais</p><p>arestas de saída do que de entradas) e termina em vi (o vértice com mais arestas de</p><p>entrada do que de saídas).</p><p>Como exemplo, pode-se analisar o digrafo da Figura 12, que é unilateralmente</p><p>conexo. Os graus dos seus vértices são:</p><p>• vértice v1: grau+(v1) = 1 e grau–(v1) = 2</p><p>• vértice v2: grau+(v2) = 3 e grau–(v1) = 2</p><p>• vértice v3: grau+(v3) = 2 e grau–(v1) = 2</p><p>• vértice v4: grau+(v4) = 2 e grau–(v1) = 2</p><p>• vértice v5: grau+(v5) = 2 e grau–(v1) = 2</p><p>• vértice v6: grau+(v6) = 1 e grau–(v1) = 1</p><p>Claramente percebe-se que o grau de entrada de v2 é o seu grau de saída</p><p>mais um. O grau de saída de v1 é o seu grau de entrada mais um. Todos os</p><p>demais vértices possuem grau de entrada igual ao grau de saída. Assim, esse</p><p>digrafo possui um caminho euleriano que inicia exatamente em v1 e termina</p><p>em v2. O caminho euleriano nesse dígrafo é: (v1, v5), (v5, v3), (v3, v4), (v4, v5), (v5,</p><p>v2), (v2, v6), (v6, v4), (v4, v2), (v2, v3), (v3, v1), (v1, v2).</p><p>Figura 12</p><p>Digrafo com caminho euleriano</p><p>v2</p><p>v1</p><p>v6</p><p>v3</p><p>v5</p><p>v4</p><p>Fonte: Elaborada pelo autor.</p><p>2.3 Subgrafos</p><p>Vídeo De maneira coloquial, um subgrafo de um grafo G é uma parte dele, ou seja, é</p><p>um grafo contendo uma parte dos vértices e das arestas de G. Quais e quantos</p><p>vértices e arestas do grafo G definem o tipo de subgrafo se torna. Define-se um</p><p>grafo H como um subgrafo de G, como sendo um grafo em que todo vértice de H</p><p>também é vértice de G e toda aresta de H também é aresta de G (FEOFILOFF; KOHA-</p><p>YAKAWA; WAKABAYASHI, 2011). Por exemplo, o grafo G, na Figura 13.</p><p>Ao analisar o grafo da Figura 14, percebe-se que todo vértice de H</p><p>está em G e que toda aresta de H também está em G. Portanto, o</p><p>grafo H é um subgrafo de G.</p><p>Segundo Feofiloff, Kohayakawa e Wakabayashi (2011), um grafo H</p><p>é um subgrafo próprio de G, se H for subgrafo e diferente de G. Um</p><p>grafo H é um subgrafo gerador de G, se tiver todos os vértices de G.</p><p>O grafo H da Figura 14 não é um sub-</p><p>grafo gerador de G, pois tem vértices</p><p>em G que não estão em H. Do mes-</p><p>mo modo, como H é diferente de G,</p><p>diz-se que H é um subgrafo próprio de G.</p><p>O subgrafo H é um subgrafo induzido de G se</p><p>todo arco de G, que tem ambas as pontas em H,</p><p>também for um arco de H, isto é, se H possuir to-</p><p>Figura 13</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 14</p><p>Subgrafo de G</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v3</p><p>v2</p><p>v1</p><p>Conectividade 41</p><p>das as arestas que aparecem em G sobre os mesmos vértices. A</p><p>Figura 15 apresenta um grafo induzido de G. Todas as arestas de</p><p>G que possuem as duas pontas em arestas do subgrafo aparecem</p><p>no grafo induzido.</p><p>Um grafo H é um grafo parcial de G, se H for um subgrafo de</p><p>G e se possuir o mesmo conjunto de vértices que G. Na Figura</p><p>16 percebe-se que o grafo possui todos os vértices do grafo G da</p><p>Figura 13, portanto, esse é um grafo parcial de G.</p><p>Pode-se definir também G’ como um supergrafo de G, se G for</p><p>subgrafo de G’.</p><p>Os conceitos de subgrafos também são aplicáveis a digrafos,</p><p>levando-se em consideração que as arestas são dirigidas. Seja G =</p><p>(V, A) um grafo. Dois subgrafos de G, G’ = (V’, A’) e G’’ = (V’’, A’’) são</p><p>chamados aresta-disjuntos se não possuírem arestas em comum,</p><p>ou seja, A’∩ A’’ = ∅. Da mesma maneira, são chamados de vérti-</p><p>ces-disjuntos se não possuírem vértices em comum, ou seja, V’ ∩</p><p>V’’ = Ø.</p><p>Por exemplo, dado o grafo G da Figura 13, a Figura 17 apresen-</p><p>ta dois subgrafos aresta-disjuntos de G e a Figura 18 apresenta</p><p>dois subgrafos vértice-disjuntos de G.</p><p>Figura 16</p><p>Grafo parcial de G</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 17</p><p>Subgrafos de G aresta-disjuntos</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 18</p><p>Subgrafos de G vértice-disjuntos</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v3</p><p>v2</p><p>v1</p><p>Figura 15</p><p>Subgrafo induzido de G</p><p>Fonte: Elaborada pelo autor.</p><p>v4</p><p>v5</p><p>v2</p><p>v1</p><p>42 Teoria dos Grafos</p><p>2.4 Cortes</p><p>Vídeo Seja G = (V, A) um grafo conexo. Denomina-se vértices de corte ou corte de vérti-</p><p>ces de G o subconjunto minimal de vértices V’ ⊂ V, cuja remoção de G torna o grafo</p><p>desconexo ou trivial (apenas um vértice sem qualquer aresta). O grafo G – V’ é des-</p><p>conexo ou trivial. Qualquer subconjunto próprio de V’, a saber, V’’ ⊂ V’, se retirado de</p><p>G, isto é G – V’’, torna o grafo conexo e não trivial (SZWARCFITER, 2018).</p><p>Um corte de arestas pode ser definido da seguinte maneira: seja G = (V, A) um</p><p>grafo conexo, um corte de arestas é um subconjunto A’ ⊂ A, cuja remoção de G tor-</p><p>na o grafo desconexo, ou seja, G – A’ é um grafo desconexo. Assim, para qualquer</p><p>subconjunto próprio de A’, a saber, A’’ ⊂ A’, o grafo G – A’’ é conexo.</p><p>O termo conectividade de vértices (cv de G) denota a cardinalidade do menor</p><p>corte de vértices de G. Já conectividade de arestas (cA de G) denota a cardinalidade</p><p>do menor corte de arestas de G. Assim, cV é o menor número de vértices que,</p><p>quando removidos de G, torna-o desconexo ou trivial. Se G é um grafo descone-</p><p>xo, então cV = cA = 0.</p><p>Considerando o grafo G mostrado na Figura 19.</p><p>Figura 19</p><p>Grafo G</p><p>Fonte: Elaborada pelo autor.</p><p>v6v1</p><p>v7v3</p><p>v8</p><p>v5v2</p><p>v4</p><p>Observe que um corte de vértices de G pode ser c1 = {v4}, pois o grafo G’ (Figura</p><p>20) com os vértices V’ = V – {v4} é desconexo. Perceba também que o conjunto c1 =</p><p>{v4} é minimal, pois não há qualquer subconjunto de c1 que, quando retirados os</p><p>vértices em G, torne o grafo desconexo.</p><p>Figura 20</p><p>Grafo G’</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v7</p><p>v8</p><p>v5</p><p>v1</p><p>v3</p><p>v2</p><p>Um subconjunto X’ de um conjun-</p><p>to X é dito minimal, em relação a</p><p>alguma propriedade, se X não for</p><p>superconjunto de nenhum outro</p><p>subconjunto de X que possua</p><p>aquela propriedade. Cuidado</p><p>para não confundir minimal com</p><p>mínimo. Minimal diz respeito à</p><p>pertinência e mínimo à cardina-</p><p>lidade (número de elementos)</p><p>(GOLDBARG; GOLDBARG, 2012).</p><p>Saiba mais</p><p>É conveniente observar que um</p><p>grafo completo K</p><p>n</p><p>, n > 1, não</p><p>possui subconjunto próprio de</p><p>vértices V’ ⊂ V cuja remoção de K</p><p>n</p><p>o desconecte, embora a remoção</p><p>de n – 1 vértices torne o grafo</p><p>trivial.</p><p>Importante</p><p>Conectividade 43</p><p>Já, para o mesmo grafo G, um corte de arestas pode ser c2 = {(v2, v4), (v3, v4)}, pois</p><p>retirando essas arestas, é obtido o grafo G’’ (Figura 21), que é desconexo. Perceba</p><p>que o conjunto c2 = {(v2, v4), (v3, v4)}, é minimal, pois não há qualquer subconjunto de</p><p>c2 que, quando retiradas as arestas em G, torne o grafo desconexo.</p><p>Figura 21</p><p>Grafo G’’</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v7</p><p>v8</p><p>v5</p><p>v1</p><p>v3</p><p>v2</p><p>v4</p><p>Para o conjunto c3 = {(v2, v4), (v3, v4), (v4, v6)}, quando essas arestas são retiradas</p><p>de G, é gerado o grafo G’’’ (Figura 22), que é desconexo. Mas c3 não é um corte de</p><p>arestas, pois não é um conjunto minimal, isto é, existe um subconjunto próprio</p><p>de c3, que no caso é o c2, que também desconecta o grafo quando as arestas são</p><p>retiradas de G.</p><p>Figura 22</p><p>Grafo G’’’</p><p>Fonte: Elaborada pelo autor.</p><p>v6</p><p>v7</p><p>v8</p><p>v5</p><p>v1</p><p>v3</p><p>v2</p><p>v4</p><p>Para determinar a conectividade de vértices cv, obtém-se o corte de vértices de</p><p>menor cardinalidade (número de elementos), ou seja, o menor número de vértices</p><p>que, quando removidos, desconecta o grafo. Para o grafo G da Figura 19, os menores</p><p>cortes de vértices são os conjuntos c1 = {v4} e c2 = {v6}, portanto, a conectividade de</p><p>vértices de G é cv = 1.</p><p>Para determinar a conectividade de arestas cA, obtém-se o corte de arestas de</p><p>menor cardinalidade (número de elementos); o menor número de arestas que,</p><p>quando removidas, desconecta o grafo. Para o grafo G da Figura 19, o menor</p><p>corte de arestas é o conjunto c3 = {(v6, v8)}, portanto, a conectividade de arestas</p><p>de G é cA = 1.</p><p>Um subconjunto X’ de um</p><p>conjunto X é dito próprio se X’</p><p>é subconjunto de X, mas não é</p><p>igual a X. Em outras palavras,</p><p>existe pelo menos um elemento</p><p>de X que não está no seu</p><p>subconjunto X’.</p><p>Atenção</p><p>44 Teoria dos Grafos</p><p>Segundo Szwarcfiter (2018), um grafo G é k-conexo em vértices se a sua conec-</p><p>tividade de vértices for cv ≥ k. Da mesma maneira, um grafo G é k-conexo em ares-</p><p>tas quando a sua conectividade de arestas for</p>