Cod sursa(job #1249741)

Utilizator Lucian.ParauLucian Parau Lucian.Parau Data 27 octombrie 2014 13:31:10
Problema Componente tare conexe Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.57 kb
#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;
}