Cod sursa(job #2936561)

Utilizator flavigFlavian flavig Data 8 noiembrie 2022 23:27:43
Problema Componente tare conexe Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.46 kb
#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int a[101][101],viz[101],n,nr=0;
vector <int> la[101];
vector<vector<int>> rez(101);

void DFS(int x)
{
    int v;
    viz[x]=1;
    rez[nr].push_back(x);
    for(int i=0; i<la[x].size(); i++)
    {
        v=la[x][i];
        if(viz[v]==0)
            DFS(v);
    }
}

int main()
{
    ifstream f("ctc.in");
    ofstream g("ctc.out");

    int i,j,m,k;

    f>>n>>m;

    while(f>>i>>j)
    {
        a[i][j]=1;
    }
//Construim matricea drumurilor cu ajutorul algoritmului Roy-Floyd
    for(k=1; k<=n; k++)
        for(i=1 ; i<=n; i++)
            for(j=1; j<= n; j++)
                if(i!=j && a[i][j]==0 && a[i][k]==1 && a[k][j]==1)
                    a[i][j]=1;



    for(i=1; i<=n; i++)
    {
        for(j=1; j<=n; j++)
            cout<<a[i][j]<<' ';
        cout<<endl;
    }
//Transformam in lista de adiacenta de graf neorientat
    for(i=1; i<=n; i++)
        for(j=1; j<=n; j++)
            if(i!=j)
                if(a[i][j] && a[j][i])
                {
                    la[i].push_back(j);
                    la[j].push_back(i);
                }

//Aflam componentele conexe
    for(i=1;i<=n;i++)
        if(viz[i]==0)
    {

        DFS(i);
        nr++;
    }
    g<<nr<<endl;
    for(i=0;i<nr;i++)
    {
        for(j=0;j<rez[i].size();j++)
            g<<rez[i][j]<<' ';
        g<<endl;
    }
    return 0;
}