<? 
 
require "Combinatorics.php";
 
 
class Geo extends Combinatorics {
 
var $nodes;
 
var $distances;
 
 
 
/***  Add a node   ***/
 
function AddNode($key, $value){
 
$insert="yes";
 
$insert=$this->isUnique($key);
 
if ($insert=="no"){
 
echo "Node key must be unique. " ;
 
}
 
else
 
$this->nodes[$key]=$value;
 
}
 
/***  Check if the node name is unique  ***/
 
function isUnique($nodekey){
 
$UNIQUE="yes";
 
if (is_Array($this->nodes)) {
 
while (list($key14,$value14 )=each($this->nodes)){
 
if (trim($key14)==trim($nodekey))
 
$UNIQUE="no";
 
return $UNIQUE ;
 
}
 
$d=reset($this->nodes);
 
}
 
}
 
 
 
 
/*** Add distances Array ***/
 
 
function addDistArray($arraykey, $distarray){
 
ksort($distarray);
 
reset($distarray);
 
 
$this->distances[$arraykey]=$distarray;
 
 
}
 
 
 
/* Print Distances */
 
 
function printDistances(){
 
 
echo "<CENTER>";
 
 
$start_table="<TABLE BORDER='1' CLASS=TABLE>";
 
$end_table="</TABLE>";
 
$start_row="<TR>";
 
$end_row="</TR>";
 
$start_col1="<TD CLASS=FCOL>";
 
$start_col="<TD align='RIGHT'>";
 
$end_col="</TD>";
 
$start_head="<TH>";
 
$end_head="</TH>";
 
 
ksort($this->nodes);
 
reset($this->nodes);
 
 
echo $start_table;
 
//echo $start_row;
 
//echo $start_col;
 
echo $start_head;
 
echo "FROM/TO" ;
 
echo $end_head;
 
//echo $end_col;
 
while (list($keynode, $namenode)=each($this->nodes))
 
{
 
//echo $start_col;
 
echo $start_head;
 
echo $namenode;
 
echo $end_head;
 
//echo $end_col;
 
}
 
 
//echo $end_row;
 
 
 
reset($this->nodes);
 
ksort($this->distances);
 
$d=reset($this->distances);
 
while (list($cityfrom, $cityarray)=each($this->distances))
 
{
 
 
echo $start_row;
 
echo $start_col1;
 
echo  $this->nodes["$cityfrom"]  ;
 
echo $end_col;
 
$d=reset($cityarray);
 
while (list($cityto, $citydist)=each($cityarray))
 
{
 
echo $start_col;
 
echo $citydist  ;
 
echo $end_col;
 
}
 
 
echo $end_row;
 
 
}
 
 
echo $end_table;
 
 
echo "</CENTER>";
 
}
 
 
/*** Print Node Name **/
 
function printNode(){
 
$d=reset($this->nodes);
 
if (is_Array($this->nodes)) {
 
while (list($key1,$value1 )=each($this->nodes)){
 
echo $value1 ."<br></br>";
 
}
 
}
 
}
 
 
/**  Returns all dispositions without repetitions **/
 
 
function allDisp($numOfElements){
 
$d=reset($this->nodes);
 
$id_el=array_keys($this->nodes);
 
$Disp=$this->makeDispositionWoR ($id_el, $numOfElements);
 
 
return $Disp;
 
}
 
 
 
function getCityName($idCity){
 
 
 
 
while (list($key, $myarr)=each($idCity))
 
{
 
$temp=array();
 
$d=reset($myarr);
 
while (list($arrkey, $arrvalue)=each($myarr))
 
{
 
 
$temp[]=$this->nodes[$arrvalue];
 
}
 
 
$cityNames[]=$temp;
 
 
}
 
 
return $cityNames;
 
}
 
 
 
Function calcDistance($iter){
 
 
while (list($key, $myarr)=each($iter))
 
{
 
 
$d=reset($myarr);
 
$nOfEl=count($myarr);
 
$distk=0;
 
$counter= 0;
 
$prev="nuovo";
 
while (list($arrkey, $arrvalue)=each($myarr))
 
{
 
 
$counter+=1;
 
 
if ($counter==1){
 
$prev=$arrvalue;
 
}
 
 
else {
 
//print "citta" . $prev .  "<BR></BR>";
 
$distk+=$this->distances[$prev][$arrvalue];
 
 
$prev=$arrvalue;
 
}
 
 
 
 
}
 
echo "Km:" . $distk . "<BR></BR>";
 
}
 
 
 
 
}
 
 
 
function addDistanceToIter($iter){
 
 
 
while (list($key, $myarr)=each($iter))
 
{
 
 
$d=reset($myarr);
 
$nOfEl=count($myarr);
 
$distk=0;
 
$counter= 0;
 
$prev="nuovo";
 
while (list($arrkey, $arrvalue)=each($myarr))
 
{
 
 
$counter+=1;
 
 
if ($counter==1){
 
$prev=$arrvalue;
 
}
 
 
else {
 
 
$distk+=$this->distances[$prev][$arrvalue];
 
 
$prev=$arrvalue;
 
}
 
 
}
 
$iter[$key]["distance"]=$distk;
 
}
 
 
 
return $iter;
 
 
}
 
 
 
function cityPlusDistance($idCity){
 
 
 
 
while (list($key, $myarr)=each($idCity))
 
{
 
$temp=array();
 
$d=reset($myarr);
 
$distk=0;
 
$counter= 0;
 
$prev="nuovo";
 
while (list($arrkey, $arrvalue)=each($myarr))
 
{
 
 
$counter+=1;
 
 
if ($counter==1){
 
$prev=$arrvalue;
 
}
 
 
else {
 
 
$distk+=$this->distances[$prev][$arrvalue];
 
 
$prev=$arrvalue;
 
}
 
 
 
 
$temp[]=$this->nodes[$arrvalue];
 
 
}
 
$temp["distance"]=$distk;
 
$cityWithDistance[]=$temp;
 
 
}
 
 
return $cityWithDistance;
 
}
 
 
 
function minDistance($cityAndDistance){
 
$min_arr=array();
 
$minval=10000000000000;
 
while (list($key, $myarr)=each($cityAndDistance))
 
{
 
 
if ($myarr["distance"] < $minval)
 
$minval=$myarr["distance"] ;
 
 
}
 
 
$d=reset($cityAndDistance);
 
 
 
while (list($key, $myarr)=each($cityAndDistance))
 
{
 
 
if ($myarr["distance"] == $minval)
 
$min_arr[]=$myarr ;
 
 
}
 
 
 
return $min_arr;
 
 
}
 
 
}
 
 |