仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1111|回复: 19
打印 上一主题 下一主题

[学习教程] PHP网站制作之PHP完成图的邻接表

[复制链接]
若天明 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-3 23:35:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
告诉你了一个方式,但是缺少努力这一环节,那也是白搭。  
  1. <?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[0], $str[1]);                 $this->createConnect($str[1], $str[0]);             }         }          //依靠
    于边的俩极点
    创立
    关系         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(!$arc  in_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写驱动程序,真是学无止境,人外有人,天外有天。
透明 该用户已被删除
5#
发表于 2015-2-8 16:40:31 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
兰色精灵 该用户已被删除
6#
发表于 2015-2-18 09:03:34 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
莫相离 该用户已被删除
7#
发表于 2015-3-6 01:48:16 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
小魔女 该用户已被删除
8#
发表于 2015-3-7 09:13:57 | 只看该作者
对于懒惰的朋友,我推荐php的集成环境xampp或者是wamp。这两个软件安装方便,使用简单。但是我还是强烈建议自己动手搭建开发环境。
飘飘悠悠 该用户已被删除
9#
发表于 2015-3-14 16:09:03 | 只看该作者
开发工具也会慢慢的更专业,每个公司的可能不一样,但是zend studio是个大伙都会用的。
只想知道 该用户已被删除
10#
发表于 2015-3-21 11:49:31 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
再现理想 该用户已被删除
11#
发表于 2015-3-22 20:59:26 | 只看该作者
这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己
老尸 该用户已被删除
12#
发表于 2015-4-4 23:07:59 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
因胸联盟 该用户已被删除
13#
发表于 2015-4-6 09:52:03 | 只看该作者
做为1门年轻的语言,php一直很努力。
爱飞 该用户已被删除
14#
发表于 2015-4-13 17:48:43 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
愤怒的大鸟 该用户已被删除
15#
发表于 2015-4-13 19:58:30 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
简单生活 该用户已被删除
16#
发表于 2015-4-21 02:21:51 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
若天明 该用户已被删除
17#
 楼主| 发表于 2015-4-21 14:22:26 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
不帅 该用户已被删除
18#
发表于 2015-6-8 05:13:51 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
再见西城 该用户已被删除
19#
发表于 2015-6-16 11:42:15 | 只看该作者
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
小妖女 该用户已被删除
20#
发表于 2015-6-30 08:41:08 | 只看该作者
基础有没有对学习php没有太大区别,关键是兴趣。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-6-16 02:44

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表