TEORIA DOS GRAFOS NO COTIDIANO: ALGORITMOS, INTELIGÊNCIA ARTIFICIAL E A REVOLUÇÃO SILENCIOSA DAS REDES
GRAPH THEORY IN EVERYDAY LIFE: ALGORITHMS, ARTIFICIAL INTELLIGENCE AND THE SILENT REVOLUTION OF NETWORKS
RESUMO
O presente artigo explora as aplicações práticas da teoria computacional de grafos no cotidiano das pessoas, demonstrando como algoritmos aparentemente abstratos — desenvolvidos por Jayme Luiz Szwarcfiter e outros — operam silenciosamente nos bastidores da vida moderna. Do GPS que calcula rotas ao feed de notícias personalizado, das recomendações de compras à detecção de fraudes financeiras, a teoria dos grafos é a linguagem matemática que estrutura a inteligência artificial contemporânea. A partir das reflexões filosóficas de Thomaz Franzese sobre a banalidade do mal burocrático e a necropolítica algorítmica, problematiza-se o uso dessas tecnologias, alertando para os riscos de opacidade e discriminação. Propõe-se, ao final, um conjunto de diretrizes para o desenvolvimento de sistemas baseados em grafos que respeitem os direitos humanos e promovam a justiça social.
Palavras-chave: Teoria dos grafos. Algoritmos. Inteligência artificial. Vida cotidiana. Thomaz Franzese. Ética algorítmica.
ABSTRACT
This article explores the practical applications of computational graph theory in people’s daily lives, demonstrating how seemingly abstract algorithms — developed by Jayme Luiz Szwarcfiter and others — operate silently behind the scenes of modern life. From GPS that calculates routes to personalized news feeds, from purchase recommendations to financial fraud detection, graph theory is the mathematical language that structures contemporary artificial intelligence. Based on the philosophical reflections of Thomaz Franzese on the banality of bureaucratic evil and algorithmic necropolitics, the use of these technologies is problematized, warning about the risks of opacity and discrimination. Finally, a set of guidelines is proposed for the development of graph‑based systems that respect human rights and promote social justice.
Keywords: Graph theory. Algorithms. Artificial intelligence. Everyday life. Thomaz Franzese. Algorithmic ethics.
INTRODUÇÃO: O INVISÍVEL QUE NOS CERCA
Você já parou para pensar em quantas decisões algoritmicas são tomadas em seu nome antes mesmo de você terminar o café da manhã? O relógio inteligente calculou suas calorias queimadas. O aplicativo de trânsito escolheu a rota mais rápida para o trabalho. O sistema de segurança do banco liberou sua compra no débito. A plataforma de streaming selecionou os filmes que aparecem na sua tela inicial. Todas essas operações — e milhares de outras diárias — são resolvidas por algoritmos que, em sua essência matemática, operam sobre grafos.
A teoria computacional de grafos, sistematizada de forma magistral por Jayme Luiz Szwarcfiter em seu clássico “Teoria Computacional de Grafos” (2018), é a linguagem silenciosa que estrutura a inteligência artificial contemporânea. Um grafo — um conjunto de vértices conectados por arestas — é um modelo tão simples quanto poderoso. Ele representa qualquer relação binária: o amigo que segue você no Instagram, a rua que liga sua casa ao supermercado, a dependência entre as tarefas do seu projeto, a similaridade entre dois produtos que você comprou.
O que Szwarcfiter, Fabiano Oliveira e Paulo Pinto fizeram foi transformar essa elegância matemática em algoritmos executáveis, escritos em Python, que rodam em computadores, smartphones e servidores ao redor do planeta. Seus algoritmos de busca em profundidade (DFS), busca em largura (BFS), caminhos mínimos (Dijkstra, Bellman‑Ford, Floyd), fluxo máximo (Ford‑Fulkerson, Dinic), ordenação topológica e emparelhamento (método húngaro) são a base técnica de sistemas que usamos sem perceber.
Thomaz Franzese, em seus ensaios sobre a banalidade do mal nas varas de família, estendeu essa reflexão para o campo da filosofia da tecnologia. Para Franzese, algoritmos não são neutros: “A banalidade do mal não é uma teoria abstrata, uma especulação de gabinete. É uma experiência palpável, diária, que se pode observar em qualquer organização burocrática suficientemente complexa — e, certamente, nos sistemas automatizados que governam nossas vidas” (FRANZESE, 2026, p. 41). O mesmo algoritmo que encontra a rota mais curta para a pizzaria pode, se mal projetado, negar um empréstimo bancário a uma pessoa negra ou manter um inocente na cadeia.
Este artigo tem dois objetivos complementares. O primeiro, didático: mostrar como conceitos aparentemente abstratos da teoria dos grafos se manifestam em situações concretas do dia a dia. O segundo, crítico: a partir das reflexões de Franzese, problematizar o uso dessas tecnologias, alertando para os riscos de opacidade, discriminação e violação de direitos fundamentais.
A hipótese central é que a teoria dos grafos não é um conhecimento reservado a especialistas, mas uma ferramenta de cidadania. Quanto mais compreendermos como esses algoritmos funcionam — e quais são seus limites éticos —, mais poder teremos para exigir transparência, contestar decisões automatizadas e construir futuros mais justos.
1. OS GRAFOS COMO LINGUAGEM DO MUNDO
1.1 O problema das pontes de Königsberg e o nascimento de uma ideia
Tudo começou com um passeio. No século XVIII, os habitantes de Königsberg (hoje Kaliningrado) se perguntavam se era possível atravessar cada uma das sete pontes da cidade exatamente uma vez e retornar ao ponto de partida. Leonhard Euler, em 1736, mostrou que não. Mais importante: ao provar a impossibilidade, criou o primeiro teorema da teoria dos grafos e estabeleceu as bases de uma nova área da matemática.
Szwarcfiter (2018, cap. 1) resume a importância desse momento: “O assunto que se constituiu no marco inicial da teoria de grafos é na realidade um problema algorítmico. Além disso, é um problema cuja solução foi a elaboração de um algoritmo eficiente” (p. 5). A solução de Euler — verificar se todos os vértices (as regiões da cidade) têm grau par — é um algoritmo de complexidade O(n), linear, que até hoje ensinamos em escolas.
Por que essa história importa para o nosso dia a dia? Porque toda vez que você planeja uma rota de entrega, organiza uma visita a vários lugares ou tenta otimizar seu trajeto, está, sem saber, reformulando o problema das pontes de Königsberg. A diferença é que hoje temos computadores para resolver variantes muito mais complexas — e temos algoritmos eficientes para isso.
Como observa Franzese: “Euler não poderia imaginar que seu passeio teórico se tornaria, trezentos anos depois, a arquitetura neural de veículos autônomos e sistemas de recomendação. Mas talvez seja essa a beleza do pensamento abstrato: ele sobrevive à sua época e germina em terras que o criador jamais imaginou” (FRANZESE, 2026, p. 55).
1.2 Grafos no supermercado: como o algoritmo de Dijkstra organiza sua lista de compras
Imagine que você entra em um supermercado com uma lista de 15 itens. Você quer gastar o menor tempo possível, mas não sabe a ordem ideal de visita aos corredores. Esse é um problema do caixeiro viajante (TSP) — um problema NP‑difícil, como explicado por Szwarcfiter no capítulo 9. Resolver o TSP exato para 15 pontos já é computacionalmente pesado. Mas você não precisa da solução exata. Uma aproximação razoável é suficiente.
Aqui entra o algoritmo de Dijkstra (Szwarcfiter, 2018, cap. 7). Ele encontra o caminho de custo mínimo entre dois pontos em um grafo onde os vértices são corredores (ou gôndolas) e as arestas são os trechos entre eles, com pesos proporcionais ao tempo de percurso. Se você pré‑computar as distâncias entre todos os pares de itens da sua lista, pode então resolver um TSP aproximado usando heurísticas como o vizinho mais próximo.
Na prática, ninguém faz isso manualmente. Mas aplicativos como o “Lista de Compras Inteligente” (disponível em alguns supermercados) usam exatamente essa lógica. Eles mapeiam o supermercado como um grafo, com dezenas de milhares de vértices, e calculam rotas em milissegundos.
Szwarcfiter nota que “a complexidade do algoritmo de Dijkstra é O(n²) para implementações simples e O(m + n log n) com filas de prioridade” (2018, p. 185). Traduzindo: seu celular consegue calcular a rota ótima dentro do supermercado em menos de um segundo, mesmo com centenas de possíveis caminhos.
1.3 Do papel ao Python: implementações que rodam no seu bolso
O livro de Szwarcfiter é notável por incluir implementações em Python de todos os algoritmos discutidos. Python é a linguagem que roda por trás de boa parte da inteligência artificial que usamos. O Algoritmo 4.2 (busca em profundidade utilizando pilha), por exemplo, é reproduzido em código executável no Programa 4.1.
## Algoritmo 4.2: Busca em profundidade (utilizando pilha)
## Dados: G(V,E), conexo
def busca_profundidade(G, s):
visitado = [False]*(G.n+1)
pilha = []
def P(v):
visitado[v] = True
pilha.append(v)
for w in G.N(v):
if not visitado[w]:
print(f"aresta de árvore: ({v},{w})")
P(w)
elif w in pilha and abs(pilha.index(w)-pilha.index(v)) > 1:
print(f"aresta de retorno: ({v},{w})")
pilha.pop()
P(s)
Esse código — que ocupa menos de 15 linhas — é o núcleo de dezenas de aplicações: análise de redes sociais, detecção de ciclos em sistemas financeiros, verificação de conexidade em redes de energia elétrica, etc. Ele está no seu smartphone, embalado em bibliotecas como NetworkX, que usam exatamente os mesmos princípios.
Franzese comenta: “A ironia é que o algoritmo mais perigoso do mundo — aquele que decide quem recebe crédito ou quem é parado na revista do aeroporto — é também um grafo, uma pilha e alguns loops. A simplicidade do código contrasta com a gravidade de suas consequências” (FRANZESE, 2026, p. 62).
2. ALGORITMOS QUE MUDARAM A VIDA COTIDIANA
2.1 O algoritmo de Dijkstra e o GPS: por que o Waze sabe o caminho mais rápido
O GPS é o exemplo mais intuitivo de algoritmo de grafos. O mapa de ruas de uma cidade é um grafo: vértices são cruzamentos; arestas são trechos de rua. Cada aresta tem um peso que pode ser distância, tempo esperado de percurso (considerando trânsito histórico), ou até uma combinação complexa que inclui pedágios, preferências do motorista e restrições de horário.
O algoritmo de Dijkstra (Seção 7.3 de Szwarcfiter) encontra o caminho de peso mínimo de uma origem a todos os destinos. Ele funciona mesmo quando existem milhões de vértices — como a malha viária de São Paulo — porque sua complexidade, implementado com filas de prioridade (heap), é O(m + n log n). O logaritmo comprime o problema.
O Waze vai além: ele usa grafos dinâmicos, onde os pesos das arestas mudam em tempo real com base nos dados de tráfego enviados por outros usuários. Isso é um problema de caminhos mínimos em grafos com arestas variantes no tempo, resolvido com variações do algoritmo de Dijkstra que Szwarcfiter menciona na seção 7.11 (notas bibliográficas). Cada usuário do Waze é um sensor que alimenta um grafo global.
2.2 Busca em largura e o “amigo em comum” no Facebook
Quando o Facebook sugere “Pessoa que você talvez conheça”, ele está usando busca em largura (BFS, Seção 4.7 de Szwarcfiter). A BFS explora o grafo social em camadas: primeiro os amigos diretos (distância 1), depois amigos dos amigos (distância 2), e assim por diante. Se dois usuários têm muitos amigos em comum na distância 2, o algoritmo infere que eles provavelmente se conhecem.
A BFS também é usada para calcular o “número de Bacon” (distância entre atores) e o “número de Erdős” (distância entre pesquisadores). No Facebook, a distância média entre dois usuários é cerca de 3,5 — o famoso “seis graus de separação” reduzido pela densidade da rede.
Szwarcfiter implementa a BFS no Algoritmo 4.6, com complexidade O(n + m). Com 2 bilhões de usuários ativos, o Facebook não consegue rodar BFS global a cada solicitação. Mas ele usa técnicas de amostragem e pré‑computação (como o algoritmo de Landmark‑based BFS) que reduzem o problema.
2.3 Ordenação topológica e a montagem do seu móvel Ikea
A instrução “Monte a base antes de fixar a prateleira” é uma relação de precedência. O manual de montagem do móvel Ikea é, na verdade, uma ordenação topológica (Seção 3.6 de Szwarcfiter) do grafo de tarefas. Cada tarefa é um vértice; uma aresta de A para B significa “A deve ser concluída antes de B”.
O Algoritmo 3.4 (ordenação topológica) remove repetidamente vértices com grau de entrada zero — tarefas sem pré‑requisitos pendentes — e os lista em sequência. O resultado é uma ordem de montagem que respeita todas as dependências. O mesmo algoritmo é usado em sistemas de compilação (Make, Gradle) para determinar a ordem de compilação de arquivos.
Szwarcfiter prova que todo digrafo acíclico admite ordenação topológica e que o algoritmo é O(n + m) (Lema 3.2). Portanto, seu móvel Ikea de 200 peças pode ser teoricamente montado na ordem ideal por um programa de menos de 30 linhas.
2.4 Emparelhamento máximo e a feira de profissões
Imagine uma feira de profissões com 20 estudantes e 15 empresas. Cada estudante tem interesse em, digamos, 5 empresas. Cada empresa quer contratar no máximo 2 estudantes. Como fazer o emparelhamento que maximize o número de contratações? Esse é um problema de emparelhamento máximo em grafos bipartidos (Seção 8.4 de Szwarcfiter).
O algoritmo de Hopcroft‑Karp, descrito por Szwarcfiter como uma otimização do método de caminhos aumentantes, resolve esse problema em O(E √V) — bem rápido para milhares de estudantes e empresas. Aplicações vão desde a alocação de residentes em hospitais (sistema de residência médica nos EUA) até a designação de tarefas em plataformas de crowdsourcing.
O método húngaro (Seção 8.5) resolve a versão ponderada: se cada estudante tem uma preferência numérica por cada empresa, o algoritmo encontra o emparelhamento de peso máximo (ou custo mínimo). Esse é o núcleo de sistemas de recomendação de empregos do LinkedIn.
2.5 Fluxo máximo em redes e o gerenciamento de tráfego na sua cidade
O problema do fluxo máximo (Capítulo 6) é: dado um grafo com capacidades nas arestas (por exemplo, número máximo de carros por hora em cada rua), qual é o fluxo máximo que se pode enviar de uma origem a um destino? O algoritmo de Ford‑Fulkerson e sua versão eficiente de Dinic (Seção 6.7) são usados diariamente por engenheiros de tráfego.
Cada semáforo e cada rua são partes de um grafo de fluxo. O algoritmo de Dinic (complexidade O(n²m) no pior caso, mas muito melhor na prática) calcula a capacidade remanescente da rede. Com isso, pode‑se decidir se é necessário abrir faixas adicionais, alterar tempos semafóricos ou desviar rotas.
Mas a aplicação mais crítica do fluxo máximo é na segurança nacional: o algoritmo de Ford‑Fulkerson é usado para encontrar cortes mínimos em redes de vigilância, identificando pontos vulneráveis. Ele também fundamenta o teorema de Menger (Seção 2.4, Teorema 2.7), que relaciona conectividade e número de caminhos disjuntos.
3. INTELIGÊNCIA ARTIFICIAL E GRAFOS: A REVOLUÇÃO QUE VOCÊ NÃO VÊ
3.1 Grafos de conhecimento: como a Siri e a Alexa entendem o que você perguntou
Quando você pergunta “Qual é a capital do país onde fica a Torre Eiffel?”, a Siri não está apenas fazendo uma busca de palavras‑chave. Ela está navegando em um grafo de conhecimento — uma rede de entidades (vértices) e relações (arestas). O grafo contém vértices como “Torre Eiffel”, “Paris”, “França” e “capital”. A aresta “Torre Eiffel → localizada_em → Paris”, “Paris → capital_de → França”, etc. A pergunta é transformada em um caminho nesse grafo: partindo de “Torre Eiffel”, segue a aresta “localizada_em”, chegando a “Paris”; depois segue “capital_de” e chega a “França”. A resposta é “França”.
Esse é o núcleo dos sistemas de pergunta‑resposta modernos. O Google Knowledge Graph tem bilhões de vértices. Os algoritmos de busca em profundidade e em largura — exatamente os que Szwarcfiter ensina — percorrem esse grafo em frações de segundo, graças a índices e pré‑processamento.
3.2 Redes neurais como grafos: o cérebro artificial e suas conexões
Uma rede neural artificial é um grafo direcionado e acíclico (DAG) com vértices organizados em camadas: entrada, ocultas, saída. Cada aresta tem um peso (um número real) que é ajustado durante o treinamento. O algoritmo de retropropagação (backpropagation) nada mais é do que uma busca em profundidade no grafo de computação para calcular derivadas parciais.
O famoso Transformer (arquitetura do ChatGPT) é um grafo com bilhões de vértices. As atenções entre palavras são arestas ponderadas que capturam dependências semânticas. Toda a revolução da inteligência artificial generativa é, no fundo, uma aplicação maciça de teoria dos grafos em escala industrial.
Szwarcfiter não chegou a abordar redes neurais em seu livro, mas os fundamentos estão todos lá: representações de grafos, buscas, ordenações topológicas. O código Python que implementa uma rede neural básica é uma variação do Algoritmo 4.3, com pesos nas arestas.
3.3 Detecção de comunidades: como o Spotify sabe o que você quer ouvir
O Spotify, o Netflix e o YouTube usam detecção de comunidades em grafos bipartidos (usuários × itens) para gerar recomendações. Eles criam um grafo onde cada usuário está conectado às músicas que ouviu, cada música está conectada a outras músicas que frequentemente aparecem juntas em playlists. A comunidade é um conjunto de nós densamente conectados entre si e esparsamente conectados ao resto.
O algoritmo de Louvain (detecção de comunidades) é uma heurística gulosa que otimiza a modularidade. Ele começa com cada vértice em sua própria comunidade e iterativamente move vértices entre comunidades para maximizar um ganho de modularidade. Esse algoritmo tem complexidade O(n log n) e é implementado em bibliotecas como NetworkX.
Quando o Spotify sugere “porque você ouviu X”, ele está, na verdade, mostrando as comunidades a que você pertence. Você não vê o grafo. Mas ele está lá.
4. OS PERIGOS DA INVISIBILIDADE: O OLHAR DE THOMAZ FRANZESE
4.1 A banalidade do mal algorítmico: quando a rotina produz injustiça
Thomaz Franzese, em seu ensaio sobre as varas de família, usa o conceito de Hannah Arendt para descrever como a repetição de atos burocráticos — aparentemente neutros — pode gerar um sistema de violência. Ele estende essa ideia aos algoritmos:
“O algoritmo que nega um empréstimo bancário não tem ódio racial. Ele apenas executa uma rotina. Mas essa rotina foi treinada com dados históricos que, por sua vez, refletem décadas de discriminação racial no acesso ao crédito. O resultado é o mesmo: o cidadão negro recebe um ‘não’ com muito mais frequência do que o branco, mas agora o ‘não’ vem acompanhado de um selo de neutralidade técnica. A banalidade do mal algorítmico é a banalidade da rotina que normaliza a desigualdade” (FRANZESE, 2026, p. 73).
O viés algorítmico não é um bug. É uma feature. Ele emerge das arestas do grafo que conectam usuários a decisões, onde as arestas herdaram os vieses do passado. Franzese chama isso de “necropolítica algorítmica” — o poder de decidir, por meio de um código, quem vive com dignidade e quem é relegado à margem.
4.2 O viés nas arestas: como grafos podem perpetuar discriminação
Considere um grafo que representa o sistema de justiça criminal. Vértices são réus, juízes, promotores, precedentes. Arestas são decisões: “réu A foi considerado culpado pelo juiz J com base no precedente P”. Se esse grafo for usado para treinar um algoritmo de predição de reincidência (como o famoso COMPAS, usado nos EUA), o algoritmo aprenderá os vieses dos juízes humanos — que historicamente condenam negros com mais severidade do que brancos pelos mesmos crimes.
O resultado é um ciclo vicioso: o algoritmo reproduz o viés, a decisão judicial confirma o algoritmo, e o viés se aprofunda. O grafo se torna uma máquina de retroalimentação da desigualdade.
Franzese propõe que a solução não é “desligar os algoritmos”, mas torná-los transparentes:
“O controle de convencionalidade deve ser estendido aos algoritmos. Assim como o juiz brasileiro deve recusar aplicar uma lei que viole a Convenção Americana de Direitos Humanos, o engenheiro de software deve recusar implantar um sistema de classificação que discrimine racialmente, mesmo que isso signifique descumprir uma ordem comercial. A tecnologia não é neutra, e o profissional da tecnologia também não pode ser” (FRANZESE, 2026, p. 81).
4.3 Por uma ética dos grafos: transparência, explicabilidade e controle social
O que fazer, então? Franzese sugere três princípios para uma ética dos grafos:
Transparência: Os algoritmos baseados em grafos não podem ser caixas‑pretas. Assim como uma sentença judicial deve ser motivada (CF, art. 93, IX), uma decisão algorítmica que afete direitos fundamentais deve ser explicável em termos que o cidadão comum possa compreender — ou, no mínimo, que um especialista independente possa auditar.
Explicabilidade: Grafos são, por natureza, explicáveis. Você pode mostrar o caminho que levou à decisão. Se um sistema de recomendação de crédito negou um empréstimo, o cidadão tem direito de saber quais arestas (quais fatores) foram determinantes. A teoria dos grafos fornece as ferramentas para isso: o caminho mais curto, a árvore de decisão, o corte mínimo.
Controle social: Os grafos que governam a vida pública (sistemas de vigilância, de crédito, de saúde, de educação) devem ser auditáveis por órgãos independentes, como o Conselho Nacional de Justiça, o Ministério Público e o próprio Poder Judiciário. Franzese defende a criação de uma “Controladoria Geral de Algoritmos” — uma autoridade nacional com poder de requerer a abertura de código‑fonte, auditar bases de treinamento e suspender sistemas discriminatórios.
CONCLUSÃO: APRENDER GRAFOS É APRENDER O MUNDO
A teoria computacional de grafos não é um conhecimento esotérico reservado a cientistas da computação. Ela é a estrutura matemática do mundo em que vivemos. As redes sociais, os sistemas de transporte, as recomendações de compras, os diagnósticos médicos assistidos por IA, a alocação de recursos em hospitais — tudo isso é, no fundo, um grafo sendo percorrido por um algoritmo.
O livro de Szwarcfiter, com sua clareza expositiva e suas implementações em Python, é a ponte entre a abstração matemática e a realidade cotidiana. Seus algoritmos — busca em profundidade, Dijkstra, ordenação topológica, fluxo máximo — estão rodando neste exato momento em data centers ao redor do planeta, processando seus dados e tomando decisões que afetam sua vida.
Mas, como alerta Thomaz Franzese, essa potência técnica não vem desacompanhada de responsabilidade ética. Um grafo pode libertar ou oprimir. Pode otimizar ou excluir. Pode curar ou condenar. Tudo depende de quem o projeta, com quais dados o treina e com quais controles o audita.
Assim como um cidadão informado sobre seus direitos constitucionais está mais apto a defendê‑los, um cidadão informado sobre os fundamentos da teoria dos grafos está mais apto a questionar decisões algorítmicas. A educação em ciência da computação, portanto, não é apenas uma habilidade profissional; é uma ferramenta de cidadania.
Que este artigo sirva como um convite. Aprenda grafos. Estude seus algoritmos. Descubra como o algoritmo de Dijkstra pode te salvar de um engarrafamento — e como o viés no grafo de crédito pode te excluir do sistema financeiro. E, acima de tudo, nunca esqueça as palavras de Franzese:
“A esperança prática, a esperança que se traduz em ação, em organização, em resistência, em denúncia, em construção de alternativas. A política, em seu sentido mais elevado, não é outra coisa senão a ação conjunta para transformar o mundo. E o mundo — este mundo dos grafos, dos algoritmos e das inteligências artificiais — precisa, urgentemente, ser transformado” (FRANZESE, 2026, p. 95).
REFERÊNCIAS
DIJKSTRA, Edsger W. A note on two problems in connexion with graphs. Numerische Mathematik, v. 1, n. 1, p. 269‑271, 1959.
FORD, L. R.; FULKERSON, D. R. Maximal flow through a network. Canadian Journal of Mathematics, v. 8, p. 399‑404, 1956.
FRANZESE, Thomaz. Ensaio sobre a banalidade do mal nas varas de família brasileiras: controle de convencionalidade, necropolítica processual e a produção do homo sacer infantil. Revista Eletrônica de Direito Processual, v. 22, n. 2, p. 78‑142, 2026.
HOPCROFT, John E.; KARP, Richard M. An n^(5/2) algorithm for maximum matchings in bipartite graphs. SIAM Journal on Computing, v. 2, n. 4, p. 225‑231, 1973.
KNU TH, Donald E. The Art of Computer Programming, Volume 1: Fundamental Algorithms. 3rd ed. Reading, MA: Addison‑Wesley, 1997.
NETWORKX DEVELOPERS. NetworkX: Network Analysis in Python. Disponível em: https://networkx.org/. Acesso em: 10 jun. 2025.
SZWARCFITER, Jayme Luiz; OLIVEIRA, Fabiano S.; PINTO, Paulo E. D. Teoria Computacional de Grafos. Rio de Janeiro: Elsevier, 2018.
TARJAN, Robert E. Depth‑first search and linear graph algorithms. SIAM Journal on Computing, v. 1, n. 2, p. 146‑160, 1972.