Cod sursa(job #695832)

Utilizator stefaniaaStefania Aungurencei stefaniaa Data 28 februarie 2012 14:59:48
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb
#include <fstream>
#include <stdio.h>
using namespace std;
FILE * dfs;
ofstream g("dfs.out");
struct nod
            {
                long inf;
                nod *urm;
            };
nod *p[100003],*ultim[100003];
long viz[100003];
long i,m,n,x,d;
void creare()
{
    for (i=1;i<=n;i++)
    {
        p[i]=new nod;
        p[i]->inf=0;
        p[i]->urm=NULL;
        ultim[i]=p[i];
    }
}
void citire()
{
    long y;
    nod *q;
    for (i=1;i<=m;i++)
    {
        fscanf(dfs,"%ld %ld",&x,&y);
        q=new nod;
        q->inf=y;
        q->urm=NULL;
        ultim[x]->urm=q;
        ultim[x]=q;
        q=new nod;
        q->inf=x;
        q->urm=NULL;
        ultim[y]->urm=q;
        ultim[y]=q;
    }
}
void sterg()
{
    nod *q;
    for (i=1;i<=n;i++)
    {
        q=p[i];
        p[i]=p[i]->urm;
        q->urm=NULL;
        delete q;
    }
}
void df(long x)
{
    nod *q;
    viz[x]=d;
    q=p[x];
    while (q)
    {
        if (!viz[q->inf])
            df(q->inf);
        q=q->urm;
    }
}
int main()
{
    dfs=fopen("dfs.in","r");
    fscanf(dfs,"%ld %ld",&n,&m);
    creare();
    citire();
    sterg();
    d=1;
    for (i=1;i<=n;i++)
        if (!viz[i])
        {
            df(i);
            d++;
        }
    d--;
    g<<d<<'\n';
    g.close();
    return 0;
}