Cod sursa(job #316451)

Utilizator stanesealexStanese Alex stanesealex Data 19 mai 2009 19:52:59
Problema Parcurgere DFS - componente conexe Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include<cstdio>

using namespace std;

struct graf
{
	int nod;
	graf *next;
};

graf *x[100010],*last[100010];
int viz[100010],c[100010];

int add(int a, int b)
{
	graf *p;
	p=new graf;
	if (x[a]==NULL)
	{
		p->nod=b;
		p->next=NULL;
		x[a]=p;
		last[a]=p;
	}
	else
	{
		p->nod=b;
		p->next=NULL;
		last[a]->next=p;
		last[a]=p;
	}
}

int exista(int n)
{
	int i;
	for (i=1;i<=n;i++)
		if (viz[i]==0)
			return i;
	return 0;
}

int main()
{
	int n,m,i,a,b,ex,nr=0,j;
	graf *p;
	FILE *f=fopen("dfs.in","r");
	FILE *g=fopen("dfs.out","w");
	fscanf(f,"%d %d ",&n,&m);
	for (i=1;i<=m;i++)
	{
		fscanf(f,"%d %d ",&a,&b);
		add(a,b);
		add(b,a);
	}
	ex=exista(n);
	nr++;
	c[1]=ex;
	i=1;
	j=1;
	viz[ex]=1;
	while (ex)
	{
		while (c[i])
		{
			p=x[c[i]];
			while (p)
			{
				if (viz[p->nod]==0)
				{
					j++;
					c[j]=p->nod;
					viz[p->nod]=1;
				}
			p=p->next;	
			}
		i++;
		}
	ex=exista(n);
	nr++;
	c[i]=ex;
	viz[ex]=1;
	}
	nr--;
	fprintf(g,"%d ",nr);
	fclose(f);
	fclose(g);
	return 0;
}