Cod sursa(job #920646)

Utilizator TzenyTenescu Andrei Tzeny Data 20 martie 2013 16:09:29
Problema Parcurgere DFS - componente conexe Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.73 kb
#include <iostream>
#include <fstream>

using namespace std;

int gl_nr,nr,parc[100],parc_backup[100],st[100],k,muchii_gasite;

ifstream fin ("dfs.in");
ofstream fout("dfs.out");

struct nod {int inf; nod * urm; int v;} * L[1000];
void bfn (nod *&prim, int n)
{
    nod *p = new  nod;
    p->inf=n;
    p->v=0;
    p->urm=prim;
    prim=p;
}
void display (nod *prim)
{
    nod *p;
    p=prim;
    while(p!=0)
    {
        cout<<p->inf<<" ";
        p=p->urm;
    }
    cout<<endl;
}
void display_reverse(nod * p)
{

    if(p->urm!=0)
        display_reverse(p->urm);
    cout << p->inf<<" ";
}

int parc_ad(int x)
{
    nr++;
    gl_nr++;
    parc[nr]=x;
    parc_backup[gl_nr]=x;
    if(L[x]==0)
        return nr;
    L[x]->v=1;
    nod *p;
    p=L[x];
    while(p!=0)
    {
        if(L[p->inf]->v==0)
        {
            parc_ad(p->inf);
        }
        p=p->urm;
    }
    return nr;
}
int main()
{
    int j,n,m,x,y,i;
    fin >> n >> m;
    for(i=1;i<=m;i++)
    {
        fin >> x >> y;
        bfn(L[x],y);
        bfn(L[y],x);
    }

    int combined = 0;
    int first_node = 1;
    int temp=0;
    while(combined<n)
    {
        nr=0;
        temp++;
        int max = parc_ad(first_node);
        muchii_gasite+=max;
        combined +=max;
        //fout << "Componenta: ";
        for(i=1;i<=max;i++)
           // fout<<parc[i]<<" ";
        for(i=1;i<=n;i++)
        {
            int ap=0;
            for(j=0;j<=combined;j++)
                if(i==parc_backup[j])
                    ap++;
            if(ap==0)
            {
                first_node = i;
                i=n+1;
            }
        }
    }

    fout << temp;

    return 0;
}