#include <cstdlib>
#include <iostream>
using namespace std;
int d[20][20],k=0,dt[20],nt,test,pop[20];
int r[20];
int main(int argc, char *argv[])
{
printf(" ===========================================================\n");
printf(" UNIVERSITE DE KINSHASA \n ");
printf(" DEPARTEMENT D'INFORMATIQUE \n ");
printf(" ETUDIANT : KAYEMBA KAVUALLA \n ");
printf(" COURS DE RECHERCHE OPERATIONNELLE\n");
printf(" ===========================================================\n");
cout<<endl<<endl<<" ALGORITHME DE NIVEAUX POUR LE MPM ";
cout<<endl<<endl<<" ================================= ";
cout<<endl<<endl<<" Nombre de taches : ";
cin>>nt;
cout<<endl;
test=nt+2; //le nombre des taches + 2 taches virtuelles
//initialisation de degré à zéro
for(int a =0;a<=nt+1;a++)
dt[a]=0;
//incrémentation de degrés et enregistrement de durée
cout<<endl<<" d[i][j]; c-a-d tache i est precedente a tache j ."<<endl;
cout<<" Si oui mettre la duree de la tache i, sinon -1 "<<endl<<endl;
for (int i=0; i<=nt+1; i++)
{
for(int j=0; j<=nt+1;j++)
{
cout<<" d["<< i<<"][" <<j<<"] = ";
cin>>d[i][j];
if (d[i][j]>-1)
dt[j]++;
}
}
//juste pour forcer
dt[0]= 0;
dt[1]=1;
dt[nt+1]=1;
system("cls");
printf(" ===========================================================\n");
printf(" UNIVERSITE DE KINSHASA \n ");
printf(" DEPARTEMENT D'INFORMATIQUE \n ");
printf(" ETUDIANT : KAYEMBA KAVUALLA \n ");
printf(" COURS DE RECHERCHE OPERATIONNELLE\n");
printf(" ===========================================================\n");
cout<<endl<<endl<<" ALGORITHME DE NIVEAUX POUR LE MPM ";
cout<<endl<<endl<<" ================================= "<<endl<<endl;
for(int sonnerie=0;sonnerie<5;sonnerie++)
printf("\a\a\a") ;
//affichage de degré
cout<<endl<<" dt[i] = k; c-a-d le degre de la tache i est k "<<endl<<endl;
for(int z=0;z<=nt+1;z++)
cout<<" dt["<< z<<"] = " <<dt[z] ;
cout<<endl<<endl;
kavy:
int love=0;
for(int e=0;e<=nt+1;e++)
{
if (dt[e]==0)
{
pop[love] = e;
love++;
dt[e]=-2;
test--;
}
}
//retrouver les rang ou les niveau de chacune des taches
for(int g=0;g<love;g++)
{
r[pop[g]]=k;
if (test==0) //quand toutes les taches s'épuise, alors on sort
{goto kaye;}
for(int h=0;h<=nt+1;h++)
{
if(d[pop[g]][h]>-1)
{dt[h]-=1;}
}
}
k++; //le compteur de rang ou niveau
goto kavy;
//résultat
kaye:
cout<<endl<<" r[i] = k; c-a-d le rang ou niveau de la tache i est k"<<endl<<endl;
for(int l=0;l<=nt+1;l++)
{
cout<<" r["<<l<<"]= "<<r[l]<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}