Cod sursa(job #164700)

Utilizator alle_forever13Alexandra Retegan alle_forever13 Data 24 martie 2008 18:16:32
Problema Parcurgere DFS - componente conexe Scor 15
Compilator cpp Status done
Runda Arhiva educationala Marime 1.15 kb
#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);


}