void getcircle(int x,int y)
{
while(x!=y)
{
circle[++tot]=x;
x=st[--tp];
}
circle[++tot]=y;
}
void dfs(int x,int lastedge)
{
mark[x]=1;
if(!flag) st[++tp]=x;//注意这里一定要加这个判断,不然的话tp可能小于0
for(int i=Last[x];i;i=Next[i])
{
int u=End[i];
if(i==(lastedge^1)) continue;
if(mark[u])
{
if(flag) continue;//这里的判断不能放在上面那个括号里,不然的话会无限循环
flag=1;
getcircle(x,u);
continue;
}
dfs(u,i);
}
if(!flag) tp--;
}
原文:https://www.cnblogs.com/dingxingdi/p/15306023.html