Ponte (teoria dos grafos)
Em teoria dos grafos, uma ponte (também conhecida como aresta-de-corte ou arco de corte ou um istmo) é uma aresta cuja deleção em um grafo aumenta o número de componentes conectados deste. Equivalentemente, uma aresta é uma ponte, se e somente se ela não está contida em qualquer ciclo.
Um grafo é dito ser sem ponte se ele não contém pontes. É fácil ver que isso é equivalente a 2-arestas-conectividade de cada componente não trivial.
Conjectura do ciclo de dupla cobertura
[editar | editar código-fonte]Um importante problema aberto envolvendo pontes é a conjectura do ciclo de dupla cobertura, devido à Seymour e Szekeres (1978 e 1979, independentemente), que afirma que todo grafo sem ponte admite um conjunto de ciclos que contém cada aresta exatamente duas vezes[1].
Algoritmo de pesquisa de pontes
[editar | editar código-fonte]Um algoritmo de complexidade para encontrar pontes em um grafo conexo foi descoberto por Tarjan em 1974[2].
Algoritmo em C++
[editar | editar código-fonte]#include <algorithm>
#include <set>
#include <vector>
#include <cstring>
#define MAX 400
using namespace std;
int n, time_s, visit[MAX];
vector<int> ADJ[MAX];
int dfs(int u, int pai, vector<pair<int,int> >& ans){
int menor = visit[u] = time_s++;
int filhos = 0;
for(int i = 0; i<ADJ[u].size(); i++){
if(visit[ADJ[u][i]]==0){
filhos++;
int m = dfs(ADJ[u][i], u, ans);
menor = min(menor,m);
if(visit[u]<m){
ans.push_back(make_pair(u, ADJ[u][i]));
}
}else if(ADJ[u][i]!=pai){
menor = min(menor, visit[ADJ[u][i]]);
}
}
return menor;
}
vector<pair<int,int> > get_articulacoes(){
vector<pair<int,int> > ans;
time_s = 1;
memset(visit, 0, n*sizeof(int));
dfs(0,-1,ans);
return ans;
}
Definições: Uma aresta não-árvore entre e é denotada por . Uma aresta em-árvore com como pai é denotada por .
onde é o nodo pai de .
detecta conexões para nós mais à esquerda ou mais para baixo na árvore.
detecta conexões para nós mais à direita ou mais para cima na árvore.
Algoritmo:
- Encontre uma árvore de extensão mínima de
- Crie uma árvore enraizada a partir da árvore de extensão mínima
- Atravesse a árvore em pós-ordem e numere os nodos. Nodos pai na árvore agora tem números mais altos do que os nodos filho.
- Para cada nodo de 1 a (o nodo raiz da árvore) faça:
- Calcule o número de descendentes para este nodo.
- Calcule e
- para cada tal que : se e então é uma ponte.
Arco de corte em árvores
[editar | editar código-fonte]Uma aresta ou arco e = uv de uma árvore G é um arco de corte de G se e somente se o grau dos vértices u e v são maiores do que 1. Arcos de corte são também definidos para grafos orientados [3]
Ver também
[editar | editar código-fonte]Bibliografia
[editar | editar código-fonte]- Béla Bollobás, Modern graph theory, GTM 184, Springer Verlag, 1998.
Referências
- ↑ http://www.cems.uvm.edu/%7Earchdeac/problems/cyclecov.htm
- ↑ "A note on finding the bridges of a graph", Robert Endre Tarjan, Information Processing Letters, April 1974 pp160-161.
- ↑ Rao, S.B.; Ramachandra Rao, A. The number of cut vertices and cut arcs in a strong directed graph. (em inglês) Acta Math. Acad. Sci. Hung. 22, 411-421 (1972).