Pagini recente » Cod sursa (job #964737) | Cod sursa (job #582419) | Cod sursa (job #3141480) | Cod sursa (job #38394) | Cod sursa (job #2936561)
#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;
}