명확한 정점의 모든 이웃 v

0

질문

나를 구현하는 알고리즘에서는 C++부스트 그래프입니다.

를 찾고 싶어하는 모든 꼭지점에 근접 v(그래서,모든 그것의 이웃사람),그 변화의 속성이 그 마지막으로 모든 그들의 가장자리입니다.

나에서 발견된 부스트 기능 adjacent_vertices(v,g) (어디 v 은 꼭지점과 g 은 그래프)을 찾는 모든 이웃이 있습니다. 음에 적용하려고 그들의 모든 기능 clear_vertex(v,g) (다 v 은 꼭지점과 g 은 그래프)을 제거하는 모든 자신들의 가장자리입니다.

이 시점에서,나는 문제입니다. 이 adjacent_vertices 함수가 반환하는 한 쌍의 adjacency_iteratorclear_vertex 기능 필요해요 vertex_iterator (만약 내가 제대로 이해하는 방법 이러한 기능이 작동하).

그래서,같은 방식으로 변환 adjacency_iteratorvertex_iterator? 는 경우 유지 adjacency_iterator 고 전달 clear_vertex 기능,문제는 그것을 제거하지 않 가장자(또는 그들을 제거하는 일부 정점).

잘못된 코드:

Graph::adjacency_iterator v,vend;
        for(boost::tie(v,vend) = neighbours; v != vend ; ++v) {
            clear_vertex(*v,g2);
        }
boost c++ graph
2021-11-20 15:27:28
1

최고의 응답

2

따라 가장자리에는 컨테이너 선택기.

가장 쉬운 방법입니다면 용기는 노드 기반의 즉만 반복기/술자를 제거한 가장자리가 무효화됩니다.

또 다른 방법은 분할하는 경우"쿼리"및"수정"면,예를 들어,

컴파일러는 탐색기

#include <boost/graph/adjacency_list.hpp>
#include <boost/graph/random.hpp>
#include <random>

void clear_all_neighbours(auto v, auto& g) {
    auto neigh = adjacent_vertices(v, g);
    std::set to_clear(neigh.first, neigh.second);

    for (auto u : to_clear)
        clear_vertex(u, g);
}

int main()
{
    std::mt19937            prng(std::random_device{}());
    boost::adjacency_list<> g;
    generate_random_graph(g, 1000,2000, prng);
    std::cout << "Before: " << num_edges(g) << "\n";

    auto v = vertex(prng() % num_vertices(g), g);
    clear_all_neighbours(v, g);

    std::cout << "After: " << num_edges(g) << "\n";
}

가능한 출력:

Before: 2000
After: 1983
2021-11-20 16:24:20

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................