Pagini recente » Istoria paginii runda/oji_go_10 | Cod sursa (job #2673384) | Cod sursa (job #2648772) | Cod sursa (job #1573057) | Cod sursa (job #2676232)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("date.in");
ofstream fout("date.out");
int matrice_adiacenta[50][50];
int matrice_lanturi[50][50];
int numar_varfuri;
void Citire()
{
fin>>numar_varfuri;
for(int i=1; i<=numar_varfuri; i++)
{
for(int j=1; j<=numar_varfuri; j++)
{
fin>>matrice_adiacenta[i][j];
matrice_lanturi[i][j] = matrice_adiacenta[i][j];
}
}
}
void afisare()
{
for(int i=1; i<=numar_varfuri; i++)
{
for(int j=1; j<=numar_varfuri; j++)
{
cout<<matrice_lanturi[i][j]<<" ";
}
cout<<endl;
}
}
void Formare_matrice_lanturi()
{
for(int k=1; k<=numar_varfuri; k++)
{
for(int i=1; i<=numar_varfuri; i++)
{
for(int j=1; j<=numar_varfuri; j++)
{
if(matrice_lanturi[i][j]==0 && i!=k && j!=k && i!=j)
{
matrice_lanturi[i][j] = matrice_lanturi[i][k] * matrice_lanturi[k][j];
}
}
}
}
}
//componenta tare conexa
void Componenta_Tare_Conexa(int varf_pornire,int vizitati[50],int v[50],int &dimv)
{
dimv++;
v[dimv] = varf_pornire;
vizitati[varf_pornire] = 1;
for(int i=1; i<=numar_varfuri; i++)
{
if(matrice_lanturi[i][varf_pornire]==1 && matrice_lanturi[varf_pornire][i]==1)
{
dimv++;
v[dimv] = i;
vizitati[i] = 1;
}
}
}
//afisare toate componentele tare conexe
void ToateComponenteleTareConexe(int vizitati[50])
{
int p = 0;
int v[50];
int dimv = 0;
int result[50][50];
for(int i=1; i<=numar_varfuri; i++)
{
dimv = 0;
if(vizitati[i]==0)
{
p++;
Componenta_Tare_Conexa(i,vizitati,v,dimv);
//cout<<"componenta conexa "<<p<<" este : ";
for(int j=1; j<=dimv; j++)
{
result[p][j] = v[j];
}
//fout<<endl;
}
}
fout << p << "\n";
for(int c = 1; c <= p; c++){
int j = 1;
while(result[c][j] != 0){
fout << result[c][j] << " ";
j++;
}
fout << "\n";
}
}
int main()
{
int vizitati[50] = {0};
int dim = 0;
int vector_componenta[50];
Citire();
Formare_matrice_lanturi();
//afisare();
ToateComponenteleTareConexe(vizitati);
fin.close();
fout.close();
return 0;
}