'); } $period_id = $herinfo['period_id']; } else { $period_id = $_GET['period_id']; } $hers = mdb2_query($db, <<fetchRow(MDB2_FETCHMODE_ORDERED))) error_user('Geen herkansingen gevonden', 'Geen enkele leerling heeft op dit moment een herkansing opgegeven'); $nodecount = 0; $toetsen = array(); $verbindingen = array(); do { $leerling_toetsen = explode(',', $row[1]); foreach ($leerling_toetsen as $toets) { if (!isset($toetsen[$toets])) $toetsen[$toets] = array( 'id' => $nodecount++, 'aantal' => 1, 'neighbors' => array(), 'graph' => NULL, 'color' => NULL); else $toetsen[$toets]['aantal']++; } for ($i = 0; $i < count($leerling_toetsen); $i++) { $toets1 = $leerling_toetsen[$i]; for ($j = $i + 1; $j < count($leerling_toetsen); $j++) { $toets2 = $leerling_toetsen[$j]; $verbinding = $leerling_toetsen[$i].'-'.$leerling_toetsen[$j]; // blokkade: een leerling doet twee herkansingen, deze mogen dus niet tegelijk if (!isset($verbindingen[$verbinding])) { $verbindingen[$verbinding] = 1; $toetsen[$toets1]['neighbors'][$toets2] = 1; $toetsen[$toets2]['neighbors'][$toets1] = 1; } else { $verbindingen[$verbinding]++; $toetsen[$toets1]['neighbors'][$toets2]++; $toetsen[$toets2]['neighbors'][$toets1]++; } } } } while (($row = $hers->fetchRow(MDB2_FETCHMODE_ORDERED))); function set_graph_id(&$toets, $id) { global $toetsen, $collections; assert(!$toets['graph']); $toets['graph'] = $id; foreach ($toets['neighbors'] as $naam => $aantal) { if ($toetsen[$naam]['graph'] === NULL) { $collections[$id][] = $naam; set_graph_id($toetsen[$naam], $id); } } } $graph_id = 0; $collections = array(); foreach ($toetsen as $naam => &$value) { if ($value['graph'] !== NULL) continue; $collections[$graph_id] = array($naam); set_graph_id($value, $graph_id++); } header('Content-Type: text/plain'); echo("aantal onafhankelijke sets: $graph_id\n"); ?>
$tmp) { if ($toetsen[$neighbor]['color'] !== NULL) continue; $colors = array(); $colorless = array(); for ($i = 0; $i < $max_colors; $i++) $colors[$i] = 0; //echo("buren: $neighbor\n"); foreach ($toetsen[$neighbor]['neighbors'] as $second_neighbor => $tmp) { if ($toetsen[$second_neighbor]['color'] !== NULL) $colors[$toetsen[$second_neighbor]['color']]++; } $possible = 0; foreach ($colors as $color => $count) { if ($count > 0) continue; //echo("probeer $neighbor $color\n"); if (probeer_kleur($neighbor, $color, $max_colors)) { $possible++; break; } } if (!$possible) { $toetsen[$toets]['color'] = NULL; return 0; } } return 1; } foreach ($collections as &$collection) { usort($collection, 'cmp'); //$toetsen[$collection[0]]['color'] = 0; foreach ($collection as $toets) { uksort($toetsen[$toets]['neighbors'], 'cmp'); } //if (count($collection) < 4) continue; $max_colors = 1; while (!probeer_kleur($collection[0], 0, $max_colors)) { //foreach ($collection as $toets) { // $toetsen[$toets]['color'] = NULL; // } $max_colors++; //echo("probeer met max_colors=$max_colors\n"); } //$max_colors = 6; //echo("probeer: ".probeer_kleur($collection[0], 0, $max_colors)); //echo("max colors = $max_colors\n"); //echo("probeer: ".probeer_kleur($collection[0], 0, 2)."\n"); echo("---\n"); foreach ($collection as $toets) { echo($toets.' '."{$toetsen[$toets]['color']}\n"); //print_r($toetsen[$toets]); } } echo("---\n"); //print_r($toetsen); ?>