|
導讀網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立... 網頁的本質就是超級文本標記語言,通過結合使用其他的Web技術(如:腳本語言、公共網關接口、組件等),可以創造出功能強大的網頁。因而,超級文本標記語言是萬維網(Web)編程的基礎,也就是說萬維網是建立在超文本基礎之上的。超級文本標記語言之所以稱為超文本標記語言,是因為文本中包含了所謂“超級鏈接”點。 本篇文章給大家帶來的內容是關于php如何實現鄰接矩陣圖的廣度和深度優先遍歷(代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。1、圖的深度優先遍歷類似前序遍歷,圖的廣度優先類似樹的層序遍歷 鄰接矩陣的廣度優先遍歷: BFS(G) for i=0;i<G->numVertexes;i++ visited[i]=false;//檢測是否訪問過 for i=0;i<G.numVertexes;i++//遍歷頂點 if visited[i]==true break;//訪問過的斷掉 visited[i]=true //當前頂點訪問 InQueue(i) //當前頂點入隊列 while(!QueueEmpty()) //當前隊列不為空 i=OutQueue() //隊列元素出隊列 for j=0;j<G->numVertexes;j++ //遍歷頂點 if G->arc[i][j]==1 && !visited[j] //當前頂點與其他頂點存在關系并且未被訪問 visited[j]=true //標記此頂點 InQueue(j) //此頂點入隊列,會排在后面等前面一層的全遍歷完才會遍歷這個 深度優先遍歷DFS: DFSTravserse G
for i=0;i<G.xNum;i++
if !visted[i]
DFS(G,i)
DFS G,i
visted[i]=true
print G.vexs[i]
if G.arc[i][j]==1 && !visited[j]
DFS(G,j)圖的物理存儲的實現: 鄰接矩陣 鄰接鏈表 十字鏈表 鄰接多重表 有向圖的存儲方法:十字鏈表 無向圖存儲的優化:鄰接多重表 圖的遍歷: 1、從圖中某一頂點出發訪遍圖中其余頂點,且使每個頂點僅被訪問一次 深度優先遍歷DFS: 1、類似走迷宮右手定則,走一個做標記,一直往右走,直到重復了,就退回上一個頂點 <?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);array(5) {
[0]=>
string(2) "V0"
[1]=>
string(2) "V4"
[2]=>
string(2) "V1"
[3]=>
string(2) "V2"
[4]=>
string(2) "V3"
}
array(5) {
[0]=>
string(2) "V1"
[1]=>
string(2) "V0"
[2]=>
string(2) "V4"
[3]=>
string(2) "V2"
[4]=>
string(2) "V3"
}以上就是php如何實現鄰接矩陣圖的廣度和深度優先遍歷(代碼)的詳細內容,更多請關注php中文網其它相關文章! 網站建設是一個廣義的術語,涵蓋了許多不同的技能和學科中所使用的生產和維護的網站。 |
溫馨提示:喜歡本站的話,請收藏一下本站!