что не так с этим кодом C ++, где я пытался получить отдельные острова графа? - PullRequest
0 голосов
/ 24 апреля 2020

Я попытался получить элементы графа, которые связаны, и n распечатать их в отдельных строках. Но, похоже, в коде есть какая-то ошибка, поэтому, пожалуйста, помогите мне ее найти. Я был бы признателен, если бы вы могли мне .It принимает ввод числа вершин [range (0, V-1)] и ребер, затем получает все отдельные острова в наборе и затем печатает их ... сообщение об ошибке * "munmap_chunk (): неверный указатель : 0x00005633da4e3e88 *** "*

#include<bits/stdc++.h>
using namespace std;
void dfs(vector<int>*edges,int V,int*visited,unordered_set<int>*component,int index)
{
    component->insert(index);
    for(int i=0;i<edges[index].size();i++)
    {
        if(visited[edges[index][i]]==0)
        {  
            visited[edges[index][i]]=1;
            dfs(edges,V,visited,component,edges[index][i]);
        }
    }
}
unordered_set<unordered_set<int>*>*getComponents(vector<int>*edges,int V)
{
    int*visited=new int[V]();
    unordered_set<unordered_set<int>*>*components=new unordered_set<unordered_set<int>*>(); 
    for(int i=0;i<V;i++)
    {
        if(visited[i]==0)
        {
            visited[i]=1;
            unordered_set<int>*component=new unordered_set<int>;
            dfs(edges,V,visited,component,i);
            components->insert(component);
        }
    }
    return components;
}
int main()
{
    // cout<<"enter the no of vertices and the no of edges in your graph "<<endl;
    int V,E;
    cin>>V>>E;
    vector<int>*edges=new vector<int>[V+1];
    for(int i=0;i<E;i++)
    {
        int a,b;
        cin>>a>>b;
        edges[a].push_back(b);
        edges[b].push_back(a);
    }
    unordered_set<unordered_set<int>*>*components=getComponents(edges,V);
    unordered_set<unordered_set<int>*>::iterator it = components->begin();
    while (it != components->end()) {
        //cout<<"component::"<<it->begin()<<endl;
        unordered_set<int>* component = *it;
        unordered_set<int>::iterator it2 = component->begin();
        while (it2 != component->end()) {
            cout << *it2 << " ";
            it2++;
        }
        cout << endl;
        delete component;
        it++;
    }
    delete components;
    delete edges;

}
...