Pagini recente » Cod sursa (job #3279087) | Cod sursa (job #2592358) | Cod sursa (job #2713681) | Cod sursa (job #1692467) | Cod sursa (job #356081)
Cod sursa(job #356081)
/*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;
}