Cod sursa(job #148750)

Utilizator uta_cristianUta Cristian uta_cristian Data 4 martie 2008 19:48:32
Problema Parcurgere DFS - componente conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include<fstream>
using namespace std;
ifstream in("dfs.in"); //pe prima linie nr de noduri si vf de start, pe urmatoarele muchiile
ofstream out("dfs.out");
int c[20],k;
void citire(int mat[500][500],int &n)
{int i,j,m;
 in>>n>>m;
 for (i=0;i<n;i++)
	 for (j=0;j<n;j++)
		 mat[i][j]=0;
 for (i=0;i<m;i++)
    {in>>i>>j;
	 mat[i-1][j-1]=mat[j-1][i-1]=1;
    }
}
void afisare(int mat[500][500],int n)
{int i,j;
   for (i=0;i<n;i++)
	{for (j=0;j<n;j++)
	  out<<mat[i][j]<<" ";
	 out<<endl;
    }
}
void bf(int mat[500][500],int n,int st)
{int s[20],i,j;
  for (i=0;i<n;i++)
	  s[i]=c[i]=0;
 i=0;k=1;
 s[st]=1;
 c[0]=st;
  while (i<k)
    {for (j=0;j<n;j++)
	  if (!s[j]&&mat[c[i]][j]) {c[k++]=j; s[j]=1;}
     i++;
    }
 //if (k==n) out<<"Graful este conex";
 // for (i=0;i<k;i++)
//	  out<<c[i]+1<<" ";
}
int main() 
{int mat[500][500],n;
 citire(mat,n);
// afisare(mat,n);		
 int s[20],i,j,nr=0;
   for (i=0;i<n;i++)
	   s[i]=0;
   for (i=0;i<n;i++)
   {if (s[i]==0) {bf(mat,n,i); nr++;}
       for (j=0;j<k;j++)
		   s[c[j]]=1;
     }
   out<<nr;
 return 0;
}