स्पष्ट शीर्ष के सभी पड़ोसियों के वी

0

सवाल

मैं लागू कर रहा हूँ एक एल्गोरिथ्म में C++ के साथ को बढ़ावा देने के ग्राफ.

मैं खोजने के लिए चाहते हैं सभी शीर्ष के पड़ोस में वी (तो, अपने सभी पड़ोसियों के साथ) है, तो एक संपत्ति को बदलने के लिए और अंत में स्पष्ट सभी उनके किनारों के.

मैंने पाया में समारोह को बढ़ावा देने adjacent_vertices(v,g) (जहाँ v शीर्ष और जी ग्राफ) को खोजने के लिए सभी पड़ोसियों. फिर मैं लागू करना चाहते हैं उन सभी पर समारोह clear_vertex(v,g) (फिर से, वी शिखर और जी ग्राफ) को दूर करने के लिए सभी अपने किनारों.

इस बिंदु पर, मैं एक समस्या है. के adjacent_vertices समारोह रिटर्न की एक जोड़ी adjacency_iteratorके लिए है , जबकि clear_vertex समारोह में मैं की जरूरत है vertex_iterator (अगर मैं सही ढंग से समझ कैसे इन कार्यों के लिए काम).

तो, वहाँ एक आसान तरीका है को बदलने के लिए adjacency_iterator में vertex_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

यह निर्भर करता है पर किनारे कंटेनर चयनकर्ताओं ।

सबसे आसान तरीका है जब कंटेनर कर रहे हैं नोड आधारित है, यानी केवल iterators/वर्णनकर्ता के लिए किसी भी हटा दिया किनारों अवैध कर रहे हैं ।

एक अन्य तरीका है जब आप विभाजन "क्वेरी" और "संशोधन" पहलुओं, जैसे

संकलक एक्सप्लोरर

#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ý
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में