Scheduling Algorithms and NP-Complete Problems

By Oleg Kiselyov

Dr. Dobb's Journal February 1997

/* schedule a pair 'pair_no', and then the others */
int schedule_pair(const int pair_no, const int i_start)
{
  if( pair_no >= N_players/2 ) return TRUE;
  for(i=i_start; i<=N_players; i++)
    for(j=i+1; j<=N_players; j++) {
      int ti = Sorted_indices[i], tj = Sorted_indices[j];
      if( allo[ti] == 0 && allo[tj] == 0 && Has_played[ti][tj] == 0 ) {
        /* Try pairing ti and tj */
        allo[ti] = tj; allo[tj] = ti;
        if(schedule_pair(pair_no+1,i+1))
          return TRUE; /* It worked! */
        else
          allo[ti] = allo[tj] = 0; /* It didn't work. */
      }
    }
  return FALSE; /* No valid pairing was found */
}

Example 1: Call schedule_pair(0,1) to schedule the entire tournament.

Back to Article


Copyright © 1997, Dr. Dobb's Journal