若天明 发表于 2015-2-3 23:35:07

PHP网站制作之PHP完成图的邻接表

告诉你了一个方式,但是缺少努力这一环节,那也是白搭。   <?php   //挪用
   require 'alGraph.php';   $a = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');   $b = array('ab', 'bc', 'be', 'cd', 'df', 'fg', 'gh', 'ga', 'hj', 'gi');      $test = new ALGraph($a, $b);   print_r($test->bfs()); ?> alGraph.php <?php   //极点
类   class Vex{         private $data;         private $headLink;          public function Vex($data, $headLink = NULL){             $this->data = $data;             $this->headLink = $headLink;         }          public function getData(){             return $this->data;         }          public function getHeadLink(){             return $this->headLink;         }          public function setHeadLink(& $link){             $this->headLink = $link;         }   }         //边类   class Arc{         private $key;         private $next;                   public function Arc($key, $next = NULL){             $this->key= $key;             $this->next = $next;          }          public function getKey(){             return $this->key;         }          public function getNext(){             return $this->next;         }          public function setNext($next){             $this->next = $next;         }   }          //邻接表类   class ALGraph{         private $vexsData;         private $vexs;         private $arcData;         private $excuteDfsResult;//深度优先遍历后的字符串了局
         private $hasList; //遍用时
贮存
遍历过的结点下标         private $queue; //广度优先遍用时
的存储队列                  public function ALGraph($vexsData, $arcData){             $this->vexsData = $vexsData;             $this->arcData = $arcData;            $this->createHeadList();             $this->createArc();          }          //创立
极点
数组         private function createHeadList(){             foreach($this->vexsData as $value){               $this->vexs[] = new Vex($value);            }         }          //创立
边表         private function createArc(){             foreach($this->arcData as $value){               $str = str_split($value);                                  $this->createConnect($str, $str);               $this->createConnect($str, $str);             }         }          //依靠
于边的俩极点
创立
关系         private function createConnect($first, $last){             $firstNode = & $this->vexs[$this->getVexByValue($first)];             $lastNode = new Arc($this->getVexByValue($last));            $lastNode->setNext($firstNode->getHeadLink());             $firstNode->setHeadLink(& $lastNode);         }          //依据
极点
的值前往
极点
在极点
数组中的下标         private function getVexByValue($value){             foreach($this->vexs as $k=>$v){               if($v->getData() == $value){                     return $k;                  }             }         }          //广度优先遍历         public function bfs(){             $this->hasList = array();             $this->queue = array();                        foreach($this->vexs as $key=>$value){               if(!in_array($value->getData(), $this->hasList)){                     $this->hasList[] = $value->getData();                     $this->queue[] = $value->getHeadLink();                                           while(!emptyempty($this->queue)){                         $node = array_shift($this->queue);                                                while($node){                           if(!in_array($this->vexs[$node->getKey()]->getData(), $this->hasList)){                                 $info = $this->vexs[$node->getKey()];                                 $this->hasList[] = $info->getData();                                 $this->queue[] = $info->getHeadLink();                           }                              $node = $node->getNext();                        }                     }               }             }            return implode($this->hasList);         }          //深度优先遍历进口
         public function dfs(){             $this->hasList = array();            foreach($this->vexs as $key=>$value){               if(!in_array($key, $this->hasList)){                     $this->hasList[] = $key;                     $this->excuteDfs($this->vexs[$key]->getHeadLink());               }             }            foreach($this->hasList as $key=>$value){               $this->hasList[$key] = $this->vexs[$value]->getData();                }            return implode($this->hasList);         }          //履行
深度遍历         private function excuteDfs($arc){             if(!$arcin_array($arc->getKey(), $this->hasList)){               return false;                }            $this->hasList[] = $arc->getKey();             $next = $this->vexs[$arc->getKey()]->getHeadLink();                      while($next){                   $this->excuteDfs($next);               $next = $next->getNext();             }         }          public function getVexs(){             return $this->vexs;         }   } ?> 不可能吃饭的时候咬了自己一下舌头就从此不吃饭了不是?放下畏惧,继续努力,咱们是来征服它的,而不是被它征服的,振奋起来吧同志。

活着的死人 发表于 2015-2-4 02:59:02

环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。

精灵巫婆 发表于 2015-2-4 20:46:37

学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。

深爱那片海 发表于 2015-2-6 15:06:27

小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。

透明 发表于 2015-2-8 16:40:31

如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,

兰色精灵 发表于 2015-2-18 09:03:34

其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。

莫相离 发表于 2015-3-6 01:48:16

作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。

小魔女 发表于 2015-3-7 09:13:57

对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。

飘飘悠悠 发表于 2015-3-14 16:09:03

开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。

只想知道 发表于 2015-3-21 11:49:31

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

再现理想 发表于 2015-3-22 20:59:26

这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己

老尸 发表于 2015-4-4 23:07:59

其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎

因胸联盟 发表于 2015-4-6 09:52:03

做为1门年轻的语言,php一直很努力。

爱飞 发表于 2015-4-13 17:48:43

,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。

愤怒的大鸟 发表于 2015-4-13 19:58:30

使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的

简单生活 发表于 2015-4-21 02:21:51

php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)

若天明 发表于 2015-4-21 14:22:26

首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。

不帅 发表于 2015-6-8 05:13:51

我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。

再见西城 发表于 2015-6-16 11:42:15

先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。

小妖女 发表于 2015-6-30 08:41:08

基础有没有对学习php没有太大区别,关键是兴趣。
页: [1]
查看完整版本: PHP网站制作之PHP完成图的邻接表