Witam
Mam napisać na zajęcia program, który przydziela studentom terminy egzaminów, co z kolei sprowadza się do kolorowania grafów. Mam to zrobić dwiema metodami - zwykłą i aproksymacyjną. I właśnie tą aproksymacyjną nie wiem jak zrobić, znalazłem jakiś kod w necie trochę przerobiłem pod swój program, ale nie chce mi działać. I prosiłbym bardzo kogoś żeby zerknął co jest nie tak i wytłumaczył o co chodzi w tym kodzie aproksynacyjnym. Poza tym jeśliby ktoś wiedział jak porównać w programie te dwie metody to też bym prosił o opisanie tego tutaj, ale to już sprawa drugorzędna. Oto kod programu:

#include <conio.h>
#include <stdio.h>

int Wczytywana[200][200]={0};
int Graf[200][200]={0};
int pomocnicza[200]={0};
int kolory[200]={0};
int pom[200]={0};//zapisuje kolory wierzcholkow polonczonych juz pokolorowanych
int i=0, j=0;
void szybkie(int l, int r);
int q;
int podzial(int l, int r);
int egzaminy=0, studenci=0;
int k=0, min=0; //k- kolor obecny
int s=0;

bool sprawdzenie(int i)

{
bool a;
a=true;//końca
j=1;
while (j<i && a)
{
if(Graf[i][j] && kolory[i] == kolory[j])
a = false;
j++;
}
return a;
}
void kolorowanie(int i)//kolorowanie zwykłym sposobem
{
if(sprawdzenie(i))
if(i==egzaminy){
pomocnicza[s] = kolory[egzaminy];
s++;
}
else for(k=1; k<=egzaminy; k++){
kolory[i+1]=k;
kolorowanie(i+1);
}
}
int odczyt(){
int pom_odcz=0;
FILE *in;
if ((in = fopen("e:Podstawy informatyki 2zad1.in", "rt")) != NULL)
{
fscanf(in, "%d %d", &egzaminy, &studenci);
for (i=0;i<studenci;i++)
{
for (j=0;!feof(in) && j<egzaminy;j++)
{
fscanf(in, "%d", &pom_odcz);
if(pom_odcz!=0)Wczytywana[i][j]=pom_odcz;
else break;
}
}
fclose(in);
}
}
int zapis()
{
FILE *out;
if ((out=fopen("e:Podstawy informatyki 2zad1.out","w+t"))!=NULL)
{
fprintf(out,"%d\n", min);
for(i=1;i<=min;i++)
{
for(j=1;j<=egzaminy;j++)
{
if(kolory[j]==i) fprintf(out,"%d ", j);
}
fprintf(out,"\n");
}
fclose(out);
}
}

int sekwencyjnie(){//kolorowanie aproksymacyjne, niestety coś nie działa i nie wiem za bardzo na czym to polega
kolory[1]=1;

for(int i=2;i<=egzaminy;i++){
for(j=1;j<=i;j++)
if(Graf[i][j]==1) pom[j]=kolory[j];//sprawdza czy wierzcholki sa polonczone i daje do pom kolory tych wierzcholkow

           szybkie(0,i);
           int a=0;
           
           
       for(int l=0;l<200;l++){
        if(pom[l]-pom[l+1]<-1){
           kolory[i]=pom[l]+1;
           a=1;
          }}
       if(a==0){kolory[i]=pom[i]+1; 
       }
}

}
void szybkie(int l, int r)
{
q=podzial(l, r);
if (q-1>l) szybkie(l, q-1);
if (r>q+1) szybkie(q+1, r);
}

int podzial(int l, int r)
{
int x;
int wynik;
x=pom[l];
int i=l;
int j=r+1;
do
{
do {
j=j-1;
} while (pom[j]>x);
do
{
i=i+1;
} while (i<=r && pom[i]<x);
if (i<j) //"zamien T[i] z T[j]"
{
int pomoc=pom[i];
pom[i]=pom[j];
pom[j]=pomoc;
}
else wynik=j;
}while (j>i);
pom[l]=pom[j]; pom[j]=x;
return wynik;
}
int main(){
odczyt();
int wybor=0;
printf("wybierz metode kolorowania\n");
printf("[1] - Pełny\n");
printf("[2] - Sekwencyjny\n");
scanf("%d", &wybor);

for(i=0;i<studenci;i++)
	for(j=0;j<egzaminy;j++)
          for(k=0;k<egzaminy;k++)
          {
           Graf[Wczytywana[i][j]][Wczytywana[i][k]]=1;
          }

if(wybor==1){

kolorowanie(0);

kolory[egzaminy]=pomocnicza[0];
for(i=1;i<egzaminy;i++)
{
	if(kolory[i]<kolory[i+1]) min=kolory[i+1];
}//minimalna liczba liczona z największej cyferki

printf("Ilosc dni sesji %d\n" , min);
printf ("\nOptymalnym rozlozeniem jest: \n\n");
printf("Numery egzaminow: ");for(i=1;i<=egzaminy;i++) printf("%d ", i);
printf("\n");
printf("Numer dnia:       ");for(i=1;i<=egzaminy;i++) printf("%d ", kolory[i]);
}	

else{ sekwencyjnie();
for(i=1;i<egzaminy;i++)
{
if(kolory[i]<kolory[i+1]) min=kolory[i+1];
}
printf("Ilosc dni sesji %d\n" , min);
printf("Numery egzaminow: ");for(i=1;i<=egzaminy;i++) printf("%d ", i);
printf("\n");
printf("Numer dnia: ");for(i=1;i<=egzaminy;i++) printf("%d ", kolory[i]);
}
zapis();

getch();
return 0;

}

Bardzo proszę o pomoc i z góry dziękuję.</i>