Pagini recente » Cod sursa (job #2643683) | Cod sursa (job #368441) | Cod sursa (job #5470) | Cod sursa (job #785291) | Cod sursa (job #1039094)
#include <iostream>
#include <fstream>
using namespace std;
int n, a[15][15], vizitat[30], st[30], vf, m;
ifstream f("graf20.txt");
void citeste()
{
f>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
f>>a[i][j];
}
int cauta()
{
for(int i=1;i<=n;i++)
if(vizitat[i]==0)
return i;
return 0;
}
void zero(int x[])
{
for(int i=1;i<=n;i++)
x[i]=0;
}
void init(int k)
{
vf=1;
st[vf]=k;
}
int este_vida()
{
return vf==0;
}
void adaug(int i, int x[])
{
vf++;
st[vf]=i;
x[i]=1;
}
void elimin()
{
vf--;
}
void prelucrare1(int x[])
{
int i=1, k=st[vf];
x[k]=1;
while(i<=n&&(a[i][k]==0||(a[i][k]==1&&x[i]==1)))
i++;
if(i==n+1)
elimin();
else adaug(i,x);
}
void prelucrare2(int x[])
{
int i=1, k=st[vf];
x[k]=1;
while(i<=n&&(a[k][i]==0||(a[k][i]==1&&x[i]==1)))
i++;
if(i==n+1)
elimin();
else adaug(i,x);
}
void comp(int x[], int y[])
{
for(int i=1;i<=n;i++)
if(x[i]==1&&y[i]==1)
{
cout<<i<<" ";
vizitat[i]=1;
}
}
int main()
{
int k, pred[20], succ[20];
citeste();
cout<<"nodul de start:";
cin>>k;
k=cauta();
m++;
cout<<"componentele tare conexe: "<<endl;
while(k)
{
cout<<endl<<m<<": ";
init(k);
zero(pred);
while(!este_vida())
prelucrare1(pred);
init(k);
zero(succ);
while(!este_vida())
prelucrare2(succ);
comp(pred, succ);
k=cauta();
m++;
}
return 0;
}