04 iunie 2010

Componentele tare conexe ale unui graf orientat

Folosind "Roy-Warshall"

#include "stdio.h"

int n, a[20][20], viz[20], d[20][20];

void citire()
{ FILE * f = fopen("proba","r");
fscanf(f,"%d", &n); int i,j;
while(!feof(f))
{ fscanf(f,"%d %d", &i, &j);
a[i][j]=1; d[i][j]=1;
a[i][i]=1; d[i][i]=1;
a[j][j]=1; d[j][j]=1; }
}

/* afisarea componentelor tare conexe */

int conex_tare()
{ /* Roy Warshall */
int i,j,k;
for(k=1; k<=n; k++)
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(d[i][k] && d[k][j])
d[i][j]=1;

int ok=1;
for(i=1; i<=n; i++)
for(j=1; j<=n; j++)
if(d[i][j]==0)
ok=0;
return ok;
}

void df(int vf)
{ int i; viz[vf]=1;
printf("%d ",vf); //afisare
for(i=1; i<=n; i++)
if((d[vf][i]==1 && d[i][vf]) && viz[i]==0)
df(i);
}


int main()
{ citire();
if(conex_tare())
printf("este tare conex\n");
else printf("nu este tare conex\n");
int i;
df(1);
for (i=1; i<=n; i++)
if(viz[i]==0)
{ printf("\n"); df(i); }
printf("\n");
return 0;
}

Niciun comentariu: