Cod sursa(job #696237)

Utilizator gabriel93Robu Gabriel gabriel93 Data 28 februarie 2012 17:40:33
Problema Parcurgere DFS - componente conexe Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include<stdio.h>
#include<cstring>
using namespace std;
FILE *f,*g;
int n,m,st[100002],viz[100002],nr,nrv;

struct nod
{
	int v;
	nod *adresa;
};
nod *a[100005];

void adaug(int x, int y)
{
	nod *p;
	p=new nod;
	p->v=y;
	p->adresa=a[x];
	a[x]=p;
}

void citire()
{
	int i,x,y;
	f=fopen("dfs.in","rt");
	fscanf(f,"%d %d",&n,&m);
	memset(a,0,sizeof(a));
	for(i=1;i<=m;i++)
	{
		fscanf(f,"%d %d",&x,&y);
		adaug(x,y);
		adaug(y,x);
	}
	fclose(f);
}

void dfs()
{
	nod *p;
	int i,poz,ok;
	for(i=1;i<=n;i++)
		if(viz[i]==0)
		{
			nr++;
			nrv++;
			st[1]=i;
			viz[i]=1;
			poz=1;
			break;
		}
	while(poz)
	{
		ok=0;
		for(p=a[st[poz]];p;p=p->adresa)
			if(viz[p->v]==0)
			{
				viz[p->v]=1;
				poz++;
				st[poz]=p->v;
				nrv++;
				ok=1;
				break;
			}
		if(ok==0)
			poz--;
	}
	if(nrv!=n)
		dfs();
}

void scrie()
{
	g=fopen("dfs.out","wt");
	fprintf(g,"%d",nr);
	fclose(g);
}

int main()
{
	citire();
	dfs();
	scrie();
	return 0;
}