Informática, perguntado por vcsk999, 5 meses atrás

Pesquise a implementação ou Implemente a busca de pontes em grafos.


(SEM BRINCADEIRAS, POR FAVOR NAO RESPONDER QUALQUER COISA SÓ PELOS PONTOS, OU ESTAREI DENUNCIANDO)

Desde ja agradeço a todos que tentar.

Anexos:

aleprezzi: isso deve ser feito em alguma linguagem específica ou não necessariamente ?
aleprezzi: pelo q lembro de grafos, tu tem q fazer um algoritmo que dado um ponto de partida e um de chegada ele percorra o caminho mais barato. por exemplo se eu sair do ponto 1 e quero chegar no ponto 6 eu posso ir por (1,2,3,6) porem tem um caminho mais rapido que é ir por (1,3,6), nesse teu exemplo as "bolinhas". Existem vários métodos para fazer esse tipo de implementação. Se puder me diz certinho qual tu precisa que tento te ajudar.
vcsk999: Boa tarde,
Pode ser em qualquer linguagem de programação.
Eu preciso que o codigo me mostre as pontes no grafo, exemplo:
Duas pontes encontradas:
3 -- 4
0 -- 3
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
aleprezzi: pontes tu te referes a pontos ligados um ao outro ?
vcsk999: exemplo: https://www.youtube.com/watch?v=sZZtkGmMW-E&t=1212s
aleprezzi: vou te deixar meu e-mail pra tentar facilitar o contato aleprezzi @ gmail com

Soluções para a tarefa

Respondido por aleprezzi
1

Resposta:

Pelo que entendi tu vai ter q fazer uma matriz pra indicar onde existe ligação entre os pontos

Como não é um grafo direcionado ( digrafo no caso)  tu tem por exemplo

ligação de 1 para 2 , como tu tem ligação de 2 para 1

desse modo tu pode criar uma matriz  (nesse caso 6x6)

onde tem ligação entre a linha e a coluna tu marca com 1

onde não tem tu marca com 0

          1    2   3   4   5   6

1         0    1    1    1    0    0

2        1     0   1    0   0    0

3        1     1    0    0   1     1

4        1    0    0    0   0    0

5        0    0    1    0    0   1

6        0    0    1    0    1    0

int n; // número de nós

vector<vector<int>> adj; // lista de adjacência - grafo

vector<bool> visited;

vector<int> tin, low;

int timer;

void dfs(int v, int p = -1) {

   visited[v] = true;

   tin[v] = low[v] = timer++;

   for (int to : adj[v]) {

       if (to == p) continue;

       if (visited[to]) {

           low[v] = min(low[v], tin[to]);

       } else {

           dfs(to, v);

           low[v] = min(low[v], low[to]);

           if (low[to] > tin[v])

               IS_BRIDGE(v, to);

       }

   }

}

void find_bridges() {

   timer = 0;

   visited.assign(n, false);

   tin.assign(n, -1);

   low.assign(n, -1);

   for (int i = 0; i < n; ++i) {

       if (!visited[i])

           dfs(i);

   }

}

Explicação:


vcsk999: Não é bem isso que estou procurando, mas obrigado por tentar.
aleprezzi: te deixei meu email ali nos comentários caso queira entrar em contato...
aleprezzi: o q eu pensei ali é q teu grafo pode ser representado por uma matriz entao tu percorre essa matriz e onde for igual a 1 significa que naquele ponto tem uma ponte, por exemplo no ponto (3,5) , significa que tem uma ponte entre os pontos 3 e 5.
vcsk999: Entendo, mas oque eu preciso mesmo é do *comando em alguma linguagem de programação*, que alimentado com as informações do meu grafo possa me trazer os valores.

Exatamente oque mostra neste video:
https://www.youtube.com/watch?v=sZZtkGmMW-E&t=1212s
aleprezzi: to dando uma olhada no video e to vendo outros que tratam do assunto, nesse video q tu passou eu vejo que ele faz um desenvolvimento em python (não conheço python direito). mas acredito que o q ele fez já é uma solução do q tu precisa.
aleprezzi: vou atualizar minha resposta colocando um código de um programa q achei com a função find_bridge()
vcsk999: Eu também cheguei neste código na pagina "cp-algorithms-brasil", mas nao consegui adaptá-lo a meu grafo, por nao entender muito de C++... Mas irei continuar tentando.
Muito obrigado pelo seu tempo e dedicação por me ajudar nesta questão.
aleprezzi: me parece que nesse código não tem o grafo definido, tambem não entendo muito de C++, mas ali parece que os dados do grafo não foram inicializados. (minha impressão)
Perguntas interessantes