[code=Cpp width=740px]#include <stdio.h>
#define MAX 9
int n,m,e[MAX][MAX],root;
int dfn[MAX],low[MAX],flag[MAX],index;
int min(int a,int b)
{
return a < b ? a : b;
}
void dfs(int cur,int father)
{
int child=0,i,j;
index++;
dfn[cur]=index;
low[cur]=index;
for(i=1;i <= n;i++)
{
if(e[cur]==1)
{
if(dfn==0)
{
child++;
dfs(i,cur);
low[cur]=min(low[cur],low);
if(cur!=root && low >= dfn[cur])
flag[cur]=1;
if(cur==root && child==2)
flag[cur]=1;
}
else if(i !=father)
{
low[cur]=min(low[cur],dfn);
}
}
}
}
int main()
{
freopen("point.in","r",stdin);
freopen("point.out","w",stdout);
int i,j,x,y;
scanf("%d %d",&n,&m);
for(i=1;i <= n;i++)
for(j=1;j <= n;j++)
e[j]=0;
for(i=1;i <= m;i++)
{
scanf("%d %d",&x,&y);
e[x][y]=1;
e[y][x]=1;
}
root=1;
dfs(1,root);
for(i=1;i <= n;i++)
{
if(flag==1)
printf("%d ",i);
}
return 0;
}
[/code]
|