Cod sursa(job #217412)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 28 octombrie 2008 14:12:26
Problema Parcurgere DFS - componente conexe Scor 55
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include<stdio.h>
#define max 10000
long n, m, i, p, u, x, y, nr;
char uz[max];
struct elem
{	long inf;
	elem *urm;
};
elem *a[max], *q;
FILE *f, *g;

int verif(long & i)
{	for(i=1; i<=n; i++)
	{       if(uz[i]==0)
		{	uz[i]=1;
			return 1;
		}
	}
	return 0;
}

void writel(elem *prim)
{	for(elem *p=prim; p; p=p->urm)
	{	fprintf(g, "%ld ", p->inf);
	}
}

int main()
{       long d[10000];
	f=fopen("dfs.in", "r");
	g=fopen("dfs.out", "w");
	fscanf(f, "%ld%ld", &n, &m);
	for(i=0; i<m; i++)
	{       fscanf(f, "%ld%ld", &x, &y);

		q=new elem;
		q->inf=x;
		q->urm=a[y];
		a[y]=q;

		q=new elem;
		q->inf=y;
		q->urm=a[x];
		a[x]=q;
	}
/*
	for(i=1; i<=n; i++)
	{       writel(a[i]);
		fprintf(g, "\n");
	}
*/
	while(verif(d[1]))
	{       p=1; u=1;
		while(p<=u)
		{	for(q=a[d[p]]; q!=NULL; q=q->urm)
			{	if(uz[q->inf]==0)
				{	u++;
					d[u]=q->inf;
					uz[q->inf]=1;
				}
			}
			p++;
		}
		nr++;
	}

	fprintf(g, "%ld", nr);

	return 0;
}