Pagini recente » Istoria paginii utilizator/sebi81georgescu | Cod sursa (job #2111441) | Cod sursa (job #2505836) | Cod sursa (job #1954162) | Cod sursa (job #164700)
Cod sursa(job #164700)
#include<stdio.h>
#define input "dfs.in"
#define output "dfs.out"
#define dim 151
void DF1(int vf);
void DF2(int vf);
int n, m, a[dim][dim], s[dim], c[dim];
int main()
{
FILE *in, *out;
in = fopen (input, "r");
out = fopen (output, "w");
fscanf(in, "%d%d", &n, &m);
int i, j, x, y;
for(i=1; i<=m; i++)
{
fscanf(in, "%d%d", &x, &y);
a[x][y] = a[y][x] = 1;
}
int ok=0, cont=0;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
if(s[j]!=-1)
s[j] = 0;
DF1(i);
for(j=1; j<=n; j++)
if(s[j]!=-1)
s[j] = 0;
DF2(i);
for(j=1; j<=n; j++)
if(c[j]==2)
{
ok = 1;
s[j] = -1;
}
if(ok==1)
cont++;
ok = 0;
for(j=1; j<=n; j++)
c[j] = 0;
}
fprintf(out, "%d", cont);
return 0;
}
void DF1(int vf)
{
int k;
if(s[vf] != -1)
{
c[vf]++;
s[vf] = 1;
}
for(k=1; k<=n; k++)
if((a[vf][k] == 1) && (s[k] == 0))
DF1(k);
}
void DF2(int vf)
{
int k;
if(s[vf] != -1)
{
c[vf]++;
s[vf] = 1;
}
for(k=1; k<=n; k++)
if((a[k][vf] == 1) && (s[k] == 0))
DF2(k);
}