Cod sursa(job #257912)

Utilizator sory1806Sandu Sorina-Gabriela sory1806 Data 14 februarie 2009 12:41:32
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include<stdio.h>
#define max 100010
long n, m, nr;
char uz[max];
struct elem
{	long inf;
	elem *urm;
};
elem *a[max], *q;
FILE *f, *g;

void read()
{       long i, x, y;
	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;
	}
}

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

void solve()
{       long d[max], p, u, i;
	d[1]=1;
	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++;
	}
}

int main()
{       f=fopen("dfs.in", "r");
	g=fopen("dfs.out", "w");
	read();
	solve();
	fprintf(g, "%ld", nr);
	fclose(g);
	return 0;
}