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; } } ?> 不可能吃饭的时候咬了自己一下舌头就从此不吃饭了不是?放下畏惧,继续努力,咱们是来征服它的,而不是被它征服的,振奋起来吧同志。 环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。 学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。 小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。 开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎 做为1门年轻的语言,php一直很努力。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会) 首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。 我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 基础有没有对学习php没有太大区别,关键是兴趣。
页:
[1]