这题是使用暴搜过的 使用了一个map的二维数组存储了边和边之间的链接 用1表示了链接 用0表示了不连接 接着用一个一维数组保存了各个点的连接数 也就是节点数 然后在使用一个数组保存了所有边界点的点 。方法很暴力 ,赶脚代码写的很丑。
# include <stdio.h>
# include <string.h>
int d[105],s[105];
int count=0,n;
int map[105][105];
int dd()
{
int i,mark=0;
for(i=1;i<=n;i++)
{
if(d[i]==1)
{
s[count++]=i;
d[i]=0;mark=1;
}
}
return mark;
}
void res()
{
int i,j;
for(i=0;i<count;i++)
{
for(j=0;j<=n;j++)
{
if(map[s[i]][j])
{
d[j]--;
map[s[i]][j]=0;
}
}
}
}
int main ()
{
int m,sum=0,x,y,i;
memset(d,0,sizeof(d));
memset(map,0,sizeof(map));
scanf("%d %d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d %d",&x,&y);
d[x]++;d[y]++;
map[x][y]=1;map[y][x]=1;
}
while(dd())
{
res();
sum++;
}
printf("%d\n",sum);
return 0;
}