美文网首页算法程序猿阵线联盟-汇总各类技术干货数据结构和算法分析
邻接矩阵实现图的深度优先和广度优先遍历(PHP)

邻接矩阵实现图的深度优先和广度优先遍历(PHP)

作者: 半亩房顶 | 来源:发表于2019-03-14 00:23 被阅读0次

图的遍历分为两种
深度优先DFS
广度优先BFS
概念不必多做解释,下面上代码,其实很简单:

<?php

class Graph{

        public $vertexs;

        public $arc;

        public $num=5;

}

$G=new Graph();

for($i=0;$i<$G->num;$i++){

        $G->vertexs[$i]="V{$i}";

}

$G->arc[1][0]=9;

$G->arc[1][2]=3;

$G->arc[2][0]=2;

$G->arc[2][3]=5;

$G->arc[3][4]=1;

$G->arc[0][4]=6;

//广度优先遍历

function BFS($G){

        $res=array();

        $queue=array();

        for($i=0;$i<$G->num;$i++){

                $visited[$i]=false;

        }   

        for($i=0;$i<$G->num;$i++){

                if($visited[$i]){

                        break;

                }   

                $visited[$i]=true;

                $res[]=$G->vertexs[$i];

                array_push($queue,$i);

                while(!empty($queue)){

                        $v=array_pop($queue);

                        for($j=0;$j<$G->num;$j++){

                                if($G->arc[$v][$j]>0 && !$visited[$j]){

                                        $visited[$j]=true;

                                        $res[]=$G->vertexs[$j];

                                        array_push($queue,$j);

                                }   

                        }   

                }   

        }   

        return $res;

}

//深度优先遍历

function DFS($G,$i){

        static $res;

        static $visited;

        if(!$visited[$i]){

                $visited[$i]=true;

                $res[]=$G->vertexs[$i];

        }

                for($j=0;$j<$G->num;$j++){

                        if($G->arc[$i][$j]>0 && !$visited[$j]){

                                $visited[$j]=true;

                                $res[]=$G->vertexs[$j];

                                DFS($G,$j);

                        }

                }

        return $res;

}

$b=BFS($G);

$d=DFS($G,1);

var_dump($b);

var_dump($d);

欢迎大家关注我的公众号


半亩房顶

相关文章

  • 数据结构与算法学习-图的遍历

    图的遍历可以分为:深度优先遍历和广度优先遍历 一、深度优先遍历 深度优先遍历的实现思路 将图的顶点和边信息输⼊入到...

  • 图的遍历

    1.采用深度优先搜索(DFS)遍历图 邻接矩阵: 邻接表: 2.采用广度优先搜索(BFS)遍历图 邻接矩阵: 邻接...

  • 2019-03-13

    python实现图:邻接表表示: 邻接矩阵表示: 深度优先,广度优先:

  • 数据结构—图的遍历

    根据图的存储方式可分为邻接矩阵的深度优先遍历和邻接表的深度优先遍历。 一、深度优先遍历 1、邻接矩阵的深度优先遍历...

  • 搜索

    一、深度优先搜索 图深度优先遍历、深度优先搜索算法求有权图两点最短路径 二、广度优先搜索 图广度优先遍历、广度优先...

  • 5. 深度优先、广度优先

    1. 二叉树的深度优先遍历和广度优先遍历2. 深度优先搜索递归和非递归实现 深度优先(DFS):前序遍历 广度优先...

  • 多级树的深度优先遍历与广度优先遍历(Java实现)

    多级树的深度优先遍历与广度优先遍历(Java实现) 深度优先遍历与广度优先遍历其实是属于图算法的一种,多级树可以看...

  • 图的深度优先遍历和马踏棋盘算法

    图的深度优先遍历思想 图的遍历通常有两种遍历次序方案: 深度优先遍历和广度优先遍历。深度优先遍历(DepthFir...

  • 前端常见面试题目(六)

    一、介绍下深度优先遍历和广度优先遍历,如何实现 通过用深度优先遍历和广度优先遍历对这个dom树进行查找来理解1、 ...

  • 哈夫曼实现 图:十字链表,邻接多重链表,邻接表(无向),邻接表

    图的遍历: 无论是广度优先,还是深度优先都是以箭头方向右边的优先遍历; 广度优先遍历(无向图): 深度优先(无向图...

网友评论

    本文标题:邻接矩阵实现图的深度优先和广度优先遍历(PHP)

    本文链接:https://www.haomeiwen.com/subject/jqcfmqtx.html