Nodes_path_analys.php 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. <?php
  2. class Nodes_path_analys {
  3. function trasuj($wezel,$last_wezel=null,$sciezka=null) {
  4. //dla pierwszego wpisu z linkow, dopisuje kolejny wpis do sciezki
  5. // dla kolejnego wpisu, tworze nowa sciezke
  6. //ignorujemy cofanie sie
  7. $licznik=0;
  8. // echo "<br>".__CLASS__.":".__FUNCTION__.":".__LINE__.". sciezka:".$sciezka." Jade wezel ".$wezel." ostatni wezel to ".$last_wezel;
  9. foreach($this->wezly->$wezel as $link=>$link_) {
  10. //echo "<br> Anal:link:".$link." ";
  11. if($link!=$last_wezel) { //ignorujemy cofanie sie
  12. if($licznik==0) { //pierwszy link
  13. $akt_sciezka=$this->sciezki[$sciezka];
  14. if(!in_array($link, $this->sciezki[$sciezka])) {
  15. //echo " dopisuje sciezke(".$link.")";
  16. $this->sciezki[$sciezka][]=$link;
  17. end($this->sciezki); //ustawiam arraya na koncu
  18. self::trasuj($link,$wezel,$sciezka);
  19. }
  20. } else { //koljny link
  21. if(!in_array($link, $this->sciezki[$sciezka])) {
  22. end($this->sciezki); //ustawiam arraya na koncu
  23. //echo "<br> Rozgalezienie na wezle ".$wezel." dla linku ".$link;
  24. //print_r($this->sciezki);
  25. $aktualny_nr_sciezki=key($this->sciezki);
  26. $this->sciezki[]=array(); //tworze nowa sciezke
  27. end($this->sciezki); //ustawiam arraya na koncu
  28. $nowy_nr_sciezki=key($this->sciezki); //ustalam jaki jest numer nowej sciezki
  29. $this->sciezki[$nowy_nr_sciezki]=$akt_sciezka; //kopiuje poprzednia sciezke
  30. $this->sciezki[$nowy_nr_sciezki][]=$link; //dopisuje jej link
  31. echo "\n// <br> - Utwozrylem kolejna sciezke nr ".$nowy_nr_sciezki." podczas gdy aktualna zawartosc sceizki(".$aktualny_nr_sciezki.")";
  32. //print_r($this->sciezki[$nowy_nr_sciezki]);
  33. echo "// <hr>";
  34. self::trasuj($link,$wezel,$nowy_nr_sciezki);
  35. }
  36. }
  37. $licznik=$licznik+1;
  38. } //else echo "(zignorowalem cofanie sie dla ".$link." )";
  39. }
  40. }
  41. function trasuj_wezly($wezly,$unlayed=null) {
  42. $this->wezly=$wezly;
  43. // print_r($this->wezly);
  44. $this->sciezki=array();
  45. foreach($this->wezly as $wezel=>$links){
  46. if(isset($unlayed)) {
  47. if(!in_array($wezel, $unlayed)) continue;
  48. }
  49. $this->sciezki[]=array(); //tworze nowa sciezke
  50. end($this->sciezki); //ustawiam arraya na koncu
  51. $aktualny_nr_sciezki=key($this->sciezki);
  52. $this->sciezki[$aktualny_nr_sciezki][]=$wezel;
  53. echo "\n// <br><font color=red><b> jade gl ".$wezel."</b> nr sciezki to:".$aktualny_nr_sciezki.":::".__CLASS__.":".__FUNCTION__.":".__LINE__."</font><br>";
  54. // print_r($this->sciezki);
  55. self::trasuj($wezel,$last_wezel,$aktualny_nr_sciezki);
  56. // print_r($this->sciezki);
  57. }
  58. return $this->sciezki;
  59. }
  60. function najdluzsza_sciezka() {
  61. $najdluzsza=0;
  62. $max_dlugosc=0;
  63. foreach($this->sciezki as $sciezka=>$trasa) {
  64. if($max_dlugosc<count($trasa)) {
  65. $najdluzsza=$sciezka;
  66. $max_dlugosc=count($trasa);
  67. }
  68. }
  69. echo "\n /* <br> 99 Najdluzsza sciezka to ".$najdluzsza.", a jej dlugosc to ".$max_dlugosc;
  70. print_r($this->sciezki[$najdluzsza]); echo "\n*/";
  71. return $najdluzsza;
  72. }
  73. }