#include <stdio.h>
#include <string.h>
int map[10][10];
int stack[10];
int top;
int instack[10];
int dfn[10], low[10];
int index;
int M,N;
void tarjan(int v)
{
int j;
dfn[v] = low[v] = ++index;
stack[++top] = v;
instack[v] = 1;
for(j = 1; j <= N; j++)
{
if(map[v][j] == 1)
{
if(dfn[j] == 0)
{
tarjan(j);
if(low[j] < low[v])
low[v] = low[j];
}
else
{
if(instack[j] == 1)
{
low[v] = dfn[j] < low[v] ? dfn[j]:low[v];
}
}
}
}
if(dfn[v] == low[v])
{
printf("connect is: \n");
do
{
j = stack[top--];
printf("%d ", j);
printf("\n");
instack[j] = 0;
}
while(j != v);
}
}
int main()
{
int i,j,s,e;
top = index = 0;
memset(map, 0 ,sizeof(map));
memset(instack, 0 ,sizeof(instack));
memset(dfn, 0 ,sizeof(dfn));
scanf("%d%d", &N, &M);
for(i = 1; i <= M; i++)
{
scanf("%d %d", &s, &e);
map[s][e] = 1;
}
tarjan(1);
return 0;
}
tarjan
最新推荐文章于 2023-07-02 10:42:44 发布