Bug in biconnected_components when handling multiple (parallel) edges between the same pair of vertices
I maintainer di solito rispondono entro 1 giorno
Valutazione
Questa issue non è ancora stata valutata.
Descrizione
Version of Boost
1.88.0
Problem description
In a block of parallel edges (e.g., three edges between A and B), only one edge receives the correct biconnected component label.
The rest are incorrectly assigned component ID 0 — even though they belong to the same biconnected component.
Expected behavior
All edges in a block of parallel edges should have the same non-zero component ID
Actual behavior
Only one edge gets the correct component ID; others are assigned 0 — which is wrong
Reproducible example
Problem can be reproduced with such program.
#include <boost/config.hpp>
#include <vector>
#include <list>
#include <boost/graph/biconnected_components.hpp>
#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/properties.hpp>
#include <boost/property_map/property_map.hpp>
#include <iterator>
#include <iostream>
namespace boost
{
struct edge_component_t
{
typedef edge_property_tag kind;
} edge_component;
}
int main()
{
using namespace boost;
typedef adjacency_list<vecS, vecS, undirectedS,
property<boost::vertex_index_t, std::size_t>,
property<edge_component_t, std::size_t>
> graph_t;
typedef graph_traits<graph_t>::vertex_descriptor vertex_t;
typedef graph_traits<graph_t>::vertices_size_type size_type;
std::vector<std::pair<size_t, size_t>> graph_edges = {
{0, 1}, {0, 1}, {0, 1}, // block of parallel edges
{1, 2}, // bridge
{2, 3}, {2, 3}, {2, 3}, // block of parallel edges
{3, 4}, // bridge
{4, 5} // bridge
};
graph_t g(graph_edges.size());
for (const auto& pair : graph_edges)
add_edge(pair.first, pair.second, g);
property_map<graph_t, edge_component_t>::type comp_map = get(edge_component, g);
std::vector<vertex_t> art_points;
auto num_comps = biconnected_components(g, comp_map, std::back_inserter(art_points));
std::cerr << "Found " << num_comps.first << " biconnected components.\n";
std::cerr << "Found " << art_points.size() << " articulation points.\n";
graph_traits<graph_t>::edge_iterator ei, ei_end;
for (boost::tie(ei, ei_end) = edges(g); ei != ei_end; ++ei)
std::cout << (char)(source(*ei, g) + 'A') << " -- "
<< (char)(target(*ei, g) + 'A')
<< " " << comp_map[*ei] << "\n";
return 0;
}
Actual output
The proram output contains block index for each edge of graph:
Found 5 biconnected components.
Found 4 articulation points.
A -- B 4
A -- B 0
A -- B 0
B -- C 3
C -- D 2
C -- D 0
C -- D 0
D -- E 1
E -- F 0
Only one of parallel edges A-B has non-zero block index. Same stands for edges C-D.
Picture shows the graph from example. Red vertices indicate articulation points. Each edge is labeled with index of biconnected component (block) to which it belongs Picture makes clear that output of example is incorrect - each group of parallel edges should form a distinct block.
Expected output
Found 5 biconnected components.
Found 4 articulation points.
A -- B 4
A -- B 4
A -- B 4
B -- C 3
C -- D 2
C -- D 2
C -- D 2
D -- E 1
E -- F 0
- Lingua principale
- C++
- Stelle
- 397
- Fork
- 246
- Merge medio
- 1g 15h
- PR unite (30g)
- 31
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di boostorg/graph
-
beginner friendly
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
boostorg/graph#593 · 39 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
algorithm beginner friendly priority: high
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
boostorg/graph#231 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
algorithm
Difficoltà 3/5 1-2 giorni Idoneità per principianti 68/100
boostorg/graph#599 · 3 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 30/100
I maintainer di solito rispondono entro 1 giorno
-
Implementing personalized PageRank for graph node scoring.Forse già presa @Becheler l’ha presa 136 giorni fa. Apertaalgorithm
boostorg/graph#493 · 22 commenti · 1 reazione · 2 assegnatari ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di boostorg/graph
Issue simili
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 78/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
EsotericSoftware/spine-runtimes#3186 ·
-
An empty line splits a signature where an ordinary comment is right above an argument's HaddockAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
mrkkrp/tilia#213 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Round video messages start gray and blocky with libx264: encoder is configured for 1,000,000 fpsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
telegramdesktop/tdesktop#31422 ·
I maintainer di solito rispondono entro 9 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
I maintainer di solito rispondono entro 5 giorni