#include #include typedef struct chainon *lsom; struct chainon {lsom suite; int s;}; void setpredsucc(int n, int a, int ar[2*a], // données qui représentent un graphe lsom pred[n], lsom succ[n]) // résultat { int s,i; for(s=0;ssuite=pred[y]; p->s=x; pred[y]=p; p=malloc(sizeof(*p)); p->suite=succ[x]; p->s=y; succ[x]=p; } } #define inconnu -1 int cherchecfc(int n, lsom pred[], lsom succ[], int cfc[]) { int finvisite[n],nbcfc=0,i=0; void avant(int s) { lsom p; cfc[s]=inconnu; for(p=succ[s];p;p=p->suite) if(!cfc[p->s]) avant(p->s); finvisite[i++]=s; } void arriere(int s) { lsom p; cfc[s]=nbcfc; for(p=pred[s];p;p=p->suite) if(cfc[p->s]==inconnu) arriere(p->s); } int s; for(s=0;ssuite) if(pere[p->s]<0) pere[p->s]=s, visite(p->s); } int s; for(s=0;s0;s=pere[s]) fils[pere[s]]=s; for(s=0;s>=0;s=fils[s]) printf("%2d %2d\n",s%(c1+1),s/(c1+1)); } return 0; }