#include<cstdio>
#include<list>
#include<queue>
using namespace std;
int V;
list<int>* point;
void Graph_Make(int V)
{
point=new list<int>[V];
}
void Edge_Create(int u,int v)
{
point[u].push_back(v);
}
void Show_Graph()
{
int i;
for(i=0;i<V;i++)
{
printf("\n");
printf("%d :",i);
for(auto it=point[i].begin();it!=point[i].end();it++)
printf("%d ",*it);
}
}
bool Check_for_cycle(int v,bool array1[],bool stack1[])
{
array1[v]=true;
stack1[v]=true;
for(auto it=point[v].begin();it!=point[v].end();it++)
{
if(!array1[*it]&&Check_for_cycle(*it,array1,stack1))
return(true);
else if(stack1[*it])
return(true);
}
stack1[v]=false;
return(false);
}
bool is_Cycle()
{
bool array1[V],stack1[V];
int i;
for(i=0;i<V;i++)
{
array1[i]=false;
stack1[i]=false;
}
for(i=0;i<V;i++)
{
if(array1[i]==false)
{
if(Check_for_cycle(i,array1,stack1))
return true;
}
}
return false;
}
int main(void)
{
int s;
bool check;
printf("\n Enter the vertices in a graph");
scanf("%d",&V);
Graph_Make(V);
Edge_Create(1,0);
Edge_Create(0,2);
Edge_Create(3,1);
Edge_Create(2,3);
Show_Graph();
check=is_Cycle();
if(check==true)
printf("\n Graph has a cycle");
else
printf("\n Graph doesn't have any cycle");
return(0);
}
ICAgICAgICAgI2luY2x1ZGU8Y3N0ZGlvPgogICAgICAgICAjaW5jbHVkZTxsaXN0PgogICAgICAgICAjaW5jbHVkZTxxdWV1ZT4KCiAgICAgICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiAgICAgaW50IFY7CiAgICAgbGlzdDxpbnQ+KiBwb2ludDsKCgoKICAgICAgdm9pZCBHcmFwaF9NYWtlKGludCBWKQogICAgICB7CiAgICAgICAgICBwb2ludD1uZXcgbGlzdDxpbnQ+W1ZdOwogICAgICB9CgoKICAgICAgdm9pZCBFZGdlX0NyZWF0ZShpbnQgdSxpbnQgdikKICAgICAgewogICAgICAgICBwb2ludFt1XS5wdXNoX2JhY2sodik7CiAgICAgIH0KCiAgICAgdm9pZCBTaG93X0dyYXBoKCkKICAgICB7CiAgICAgICAgaW50IGk7CiAgICAgICAgZm9yKGk9MDtpPFY7aSsrKQogICAgICAgIHsKICAgICAgICAgIHByaW50ZigiXG4iKTsKICAgICAgICAgIHByaW50ZigiJWQgOiIsaSk7CiAgICAgICAgICBmb3IoYXV0byBpdD1wb2ludFtpXS5iZWdpbigpO2l0IT1wb2ludFtpXS5lbmQoKTtpdCsrKQogICAgICAgICAgICAgICBwcmludGYoIiVkICIsKml0KTsKICAgICAgICB9CiAgICAgfQoKICAgYm9vbCBDaGVja19mb3JfY3ljbGUoaW50IHYsYm9vbCBhcnJheTFbXSxib29sIHN0YWNrMVtdKQogICB7CiAgICAgIGFycmF5MVt2XT10cnVlOwogICAgICBzdGFjazFbdl09dHJ1ZTsKCiAgICAgIGZvcihhdXRvIGl0PXBvaW50W3ZdLmJlZ2luKCk7aXQhPXBvaW50W3ZdLmVuZCgpO2l0KyspCiAgICAgIHsKICAgICAgICAgIGlmKCFhcnJheTFbKml0XSYmQ2hlY2tfZm9yX2N5Y2xlKCppdCxhcnJheTEsc3RhY2sxKSkKICAgICAgICAgICAgIHJldHVybih0cnVlKTsKICAgICAgICAgIGVsc2UgaWYoc3RhY2sxWyppdF0pCiAgICAgICAgICAgICByZXR1cm4odHJ1ZSk7CiAgICAgIH0KICAgICAgc3RhY2sxW3ZdPWZhbHNlOwogICAgICByZXR1cm4oZmFsc2UpOwogICB9CgoKICAgIGJvb2wgaXNfQ3ljbGUoKQogICAgewogICAgICAgYm9vbCBhcnJheTFbVl0sc3RhY2sxW1ZdOwogICAgICAgaW50IGk7CiAgICAgICBmb3IoaT0wO2k8VjtpKyspCiAgICAgICB7CiAgICAgICAgICAgIGFycmF5MVtpXT1mYWxzZTsKICAgICAgICAgICAgc3RhY2sxW2ldPWZhbHNlOwogICAgICAgfQogICAgICAgZm9yKGk9MDtpPFY7aSsrKQogICAgICAgewogICAgICAgICAgaWYoYXJyYXkxW2ldPT1mYWxzZSkKICAgICAgICAgewogICAgICAgICAgIGlmKENoZWNrX2Zvcl9jeWNsZShpLGFycmF5MSxzdGFjazEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKCgogICAgICBpbnQgbWFpbih2b2lkKQogICAgICB7CiAgICAgICAgIGludCBzOwogICAgICAgICBib29sIGNoZWNrOwogICAgICAgICBwcmludGYoIlxuIEVudGVyIHRoZSB2ZXJ0aWNlcyBpbiBhIGdyYXBoIik7CiAgICAgICAgIHNjYW5mKCIlZCIsJlYpOwogICAgICAgICBHcmFwaF9NYWtlKFYpOwogICAgICAgICBFZGdlX0NyZWF0ZSgxLDApOwogICAgICAgICBFZGdlX0NyZWF0ZSgwLDIpOwogICAgICAgICBFZGdlX0NyZWF0ZSgzLDEpOwogICAgICAgICBFZGdlX0NyZWF0ZSgyLDMpOwogICAgICAgICBTaG93X0dyYXBoKCk7CiAgICAgICAgIGNoZWNrPWlzX0N5Y2xlKCk7CiAgICAgICAgIGlmKGNoZWNrPT10cnVlKQogICAgICAgICAgICBwcmludGYoIlxuIEdyYXBoIGhhcyBhIGN5Y2xlIik7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgcHJpbnRmKCJcbiBHcmFwaCBkb2Vzbid0IGhhdmUgYW55IGN5Y2xlIik7CiAgICAgICAgIHJldHVybigwKTsKICAgICAgICAgfQo=