Algorithm Alley
by Oleg Kiselyov


Example 1: 

/* 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 */
}





