Pagini recente » Borderou de evaluare (job #2594854) | Cod sursa (job #1249741)
#include <fstream>
#define NMAX 10001
using namespace std;
ifstream fin ("graf.in");
ofstream fout ("graf.out");
void citire();
void tareconex();
void matrice();
int n, m, tare;
int M[NMAX][NMAX];
int uz[NMAX];
int main()
{
citire();
matrice();
tareconex();
return 0;
}
void citire()
{
fin>>n>>m; // vf si muchii
int i, x, y;
for(i=1; i<=n; i++)
M[i][i]=1;// diagonala principala
for(i=1; i<=m; i++)
{
fin>>x>>y;
M[x][y]=1; // Exista muchie de la x la y
}
fin.close ();
}
void matrice()
{
int i, j, k;
for(k=1; k<=n; k++)
for(i=1; i<=n; i++ )
for(j=1; j<=n; j++)
if(M[i][j]==0)
M[i][j]=M[i][k]&&M[k][j]; // Daca unul din ele va fi 0 va da 0, iar daca ambele vor fi 1 va da 1.
}
void tareconex()
{
int i, j;
// determin toate componentele conexe
for(i=1; i<=n; i++)
if(uz[i]==0)// daca i nu se alfa in nicio componenta conexa
{
//contruiesc o noua componenta conexa
uz[i]=1;
fout<<i<<" ";
for(j=1; j<=n; j++)
if(M[i][j]==1 && M[j][i]==1 && uz[j]==0)//daca exista drum de la i la j si invers si varfurile nu sunt deja intr-o componenta conexa
{
fout<<j<<" ";// afisam componentele
uz[j]=i;// punem in uz primul element din componenta
}
fout<<'\n';
}
return;
}