Cod sursa(job #356081)

Utilizator swxxIoo Andrei Rares swxx Data 13 octombrie 2009 14:22:52
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
/*Pentru a calcula numarul componentelor conexe trebuie sa parcurgem 
garful, iar in vectorul vizitat vom avea portiuni de 1 pt o componeta conexa.
 */
#include<iostream>
#include<fstream>
using namespace std;

int n, a[40][40], vizitat[40],i,j;
ofstream g ("dfs.out");
//parcurgem graful in adancime
void df(int j)
{
     vizitat[j]=1;
     for(i=1;i<=n;i++)
        if(vizitat[i]==0&&a[i][j]==1)
            df(i);
}


int main()
{
    //citim graful din fisier prin matricea de adiacenta
      ifstream f("dfs.in");
         f>>n;
         for(i=1;i<=n;i++)
           for(j=1;j<=n;j++)
             f>>a[i][j];
     f.close();
     
   //plecam in cautarea componentelor incepand cu primul nod 
   df(1); 
   
   
    int ok=1,k=0;//k=variabila care numara componentele conexe
    
     while(ok)
     {
       ok=0;
       k++; //crestem numarul componentei
       for(i=1;i<=n;i++)//cautam 0, unde se termina componenta conexa
          if(vizitat[i]==0)
            {
              ok=1;
              df(i);//daca am gasit 0 continuam parcurgerea de la nodul i cautand apoi alta componenta 
            }
       }   
   g<<k/2;
   

return 0;
}