segmentation fault
using namespace std;
template<typename T>
class graph{
map<T,list<T> >m;
public:
void add_edge(T u, T v, bool bidir=true){
m[u].push_back(v);
if(bidir){
m[v].push_back(u);
}
}
bool cyclic_util(T node,map<T,bool> &visited, map<T,bool> &re_stack){
visited[node] = true;
re_stack[node] = true;
for(auto i: m[node]){
if(visited[i] && cyclic_util(i,visited,re_stack)){
return true;
}
else if(visited[i] && re_stack[i]){
return true;
}
}
re_stack[node] = false;
return false;
}
bool isCyclic(){
map<T,bool> visited;
map<T,bool> re_stack;
for(auto i: m){
visited[i.first] = false;
}
for(auto i: m){
if(!visited[i.first]){
bool cycle = cyclic_util(i.first,visited,re_stack);
if(cycle == true) return true;
}
}
return false;
}
};
int main(){
graph<int> g;
g.add_edge(0,2,false);
g.add_edge(0,1,false);
g.add_edge(2,3,false);
g.add_edge(2,4,false);
g.add_edge(3,0,false);
g.add_edge(4,5,false);
g.add_edge(1,5,false);
bool cycle = g.isCyclic();
if(cycle == true) cout<<"cycle detected"<<endl;
else cout<<"cycle not detected"<<endl;
}```