Location: PHPKode > projects > Music and Discography Database > music_db/dist-matrix.php
<?php
#### DISTANCE MATRIX FROM PGSQL
####
#### hide@address.com 2007.03.xx

	$distance = 0;
	$D = array("$rid" => "$distance");
	
	// a gráf minden eleme kezdetben végtelen távolsággal
	query("SELECT albumid as id FROM nexus WHERE albumid!=$rid GROUP BY albumid");
	$T = array();	// ideiglanes tömb
	$P = array();	// éllista tömb

	for ($i=0;$i<$nur;$i++) {
		$rh = next_row();
		$item = array($rh['id'] => 10000);
		array_push_associative($T,$item);
	}
	foreach ($ostd as $o) {
		$item = array($o => $rid);
		array_push_associative($P,$item);
		$T[$o] = '1';		// távolságok egyre csökkentése, a szomszédokra
	}

	$nexus = array();
	query("SELECT albumid AS id,array_accum(musid) AS md FROM nexus GROUP BY albumid");
	for ($i=0;$i<$nur;$i++) {
		$r = next_row();
		preg_match('/^{(.+)}$/',$r['md'],$m);
		$md = preg_split('/,/',$m[1]);
		$item = array($r['id'] => $md);
		array_push_associative($nexus,$item);
	}
	// main cicle +++++++++++++++++++++++++++
	// $T

	$distance++;
	while(count($T) > 1) {
		if (!($PP = array_search($distance,$T)))			// egy min. távolságú elem
			$distance++;									// ha nincs, megnézzük a szomszédok szomszédait
		if (!($PP = array_search($distance,$T)))			// ha az sincs, végére értünk a gráfnak
			break;

		$PPd = $T[$PP];
		unset($T[$PP]);
		$item = array($PP => $PPd);
		array_push_associative($D,$item);					// egy min. távolságú elem a kész elemek közé

		$ms = $nexus[$PP];
		$t = array_keys($T);								// nem kész elemek listája (mindenki aki nincs benne a készben)
		foreach ($t as $id) {								// Kiválszott kész elem nem kész szomszédai
			foreach ($ms as $mms) {
				if (in_array($mms,$nexus[$id])) {
					if ($T[$id]>$distance) {
						$T[$id] = $distance+1;
						$item = array($id => $PP);
						array_push_associative($P,$item);
					}
					break;
				}
			}
		}
	}
/*foreach($P as $key => &$value) {
	print "$key - $value<BR>";
}*/

	if (isset($graf) and $graf!=$rid) {
		foreach($P as $key => &$value) {
			if ($key == $graf and !$S) {
				$PV = $key;
				query("SELECT artist,title FROM album WHERE id=$key");
				$r = next_row();
				print "<DL STYLE='font-size:11px'>{$r['artist']} - {$r['title']}";
				break;
			} 
		}
		$CV = '';
		while ($CV != $rid) {
			list($PV,$CV) = line($P,$PV);
		}
	} else {
		print "
		<FORM METHOD=post>
		<INPUT TYPE=hidden NAME=graf VALUE=$rid>
		<P> Gráf mérete "; print count($D); print " album<P>";
		// export fokszám tömb (minden pontra a szomszédok száma)
		$PVL = 0;
		unset($D[$rid]);
		foreach ($D as $key=>$value) {
			if ($PVL < $value) {
				print "<DL> <DIV STYLE='background-color:#37BBC2'>$value lépés:</DIV>";
				$PVL = $value;
			}
			print "<INPUT TYPE=submit NAME=select VALUE=$key STYLE='background:transparent;border:1px gray dotted;margin-bottom:2px;margin-right:2px'>";
		}
		print "</FORM>";
	}

?>
Return current item: Music and Discography Database