Académique Documents
Professionnel Documents
Culture Documents
h>
# include <stdlib.h>
# include <math.h>
int recher(int t[], int n,int el) //recherche 'el' dans les n elements de
t[],renvoie 1 si 'el' est retrouve et 0 sinon
{ int i;
int trouve=0;
for (i=0;i<n;i++)
if (t[i]==el)
trouve=1;
return trouve;}
if (k>1)
{printf("Il y a plus d'une racine\n");
return -1;
}
if (k==1)
{for(i=0;i<n;i++)
for (j=0;j<n;j++)
if(recherche(ord,k,p[j],1,p[j][0])==p[j][0])//verifie si pour un
sommet 'j' donne tous les predecesseurs sont dans ord[]
if (recher(ord,k,j)==0)//s'il n'est pas encore dans ord[], l'y
mettre
{ord[k]=j;
k++;
}
if (k==n)
{printf("La numerotation par une fonction ordinale donne:\n");
for (i=0;i<k;i++)
printf("%5d",ord[i]);
printf("\n");
return k;}//retourne le nombre de sommets effectivement ordonnes
if (k<n)
{printf("Le graphe contient un circuit\n");//si tous les sommets ne sont
pas dans ord[], c'est parce que nous avons un circuit
return -1;} //retourne -1 s'il n'y a pas une unique racine
}
int main()
{ int t[100][100]; int p[100][100];int ord[100];
int n; int a; int b;
printf ("Donner le nombre de sommets...\n");
scanf("%d",&n);
matrice(t,n);
predecesseur(t,p,n);
if (ordinal(p,n,ord)==n)
bellman(p,ord,t,n);
printf("\n");
system("PAUSE");
return 0;
}