मैं एक वेक्टर में एक सूची में एक तत्व जोड़ने की कोशिश कर रहा हूँ। त्रुटि addEdge विधि में होती है क्योंकि यह वांछित कंटेनर (सेगमेंटेशन गलती) तक नहीं पहुंच सकता है। ग्राफ एक वेक्टर है जहां प्रत्येक कंटेनर में इससे जुड़े शिखरों की एक सूची होती है (और उस किनारे का वजन, जो इस मामले में 0 है)।

Graph(int n, bool directed)
    {
        this->n = n;
        graph.reserve(n);
        this->directed = directed;
        this->m = 0;
    }

    void addEdge(int x, int y)
    {
        graph[x - 1].push_back({y - 1, 0});
        if (!directed)
            graph[y - 1].push_back({x - 1, 0});
        m++;
    }

M किनारों की संख्या है और n शीर्षों की संख्या है। मैंने इसे सरल सरणियों के साथ पहले भी कई बार किया है, लेकिन अभी तक इसे वैक्टर के साथ नहीं आज़माया है। वर्ग के होते हैं:

int n;
int m;
bool directed;
std::vector<std::list<std::pair<int, int>>> graph;
-1
Vojin 19 जिंदा 2020, 00:48

1 उत्तर

सबसे बढ़िया उत्तर

graph.reserve(n) के बाद, graph.size() अभी भी शून्य है। reserve वेक्टर की क्षमता को प्रभावित करता है, उसके आकार को नहीं। फिर graph[x - 1] एक इंडेक्स को सीमा से बाहर एक्सेस करके अपरिभाषित व्यवहार प्रदर्शित करता है (x का कोई भी मान एक इंडेक्स को सीमा से बाहर करता है, क्योंकि वेक्टर खाली है)।

आपका मतलब शायद graph.resize(n) था

1
Igor Tandetnik 18 जिंदा 2020, 23:03