數據結構與算法(17)--圖的遍歷

BFS 廣度優先搜索

類似於樹的層次遍歷

#define MaxSize 100;
bool visited[MaxSize];
void BFS(Graph G,int v){
	ArcNode *p; // 工作指針p
	InitQueue(Q); // 初始化一個隊列
	visit(v); // 訪問第一個頂點v.具體可以是Print
	visited[V] = TRUE; // 對v做已訪問標記
	Enqueue(Q,v); // 頂點v入隊
	while(isEmpty(Q))
	{ // 只要隊列不空
		DeQueue(Q,v); // 頂點v出隊列
		p = G->adjList[v].firstdge; // 指針p指向當前頂點的邊錶鏈表頭指針
		while(p)
		{
			if(visited[p->adhvex]) // p所指向頂點如果未被訪問
			{
				visit(p->adjvex); // 訪問p所指向的頂點
				EnQueue(Q.p->adjvex); // 這個頂點入隊
			}
			p = p->next; // p 指向該頂點的下一條邊
		}
	}
};

void BFSTraverse(Graph G)
{
	int i; // 單獨定義是未了方便多個循環中使用
	for(i=0;i<G->vexnum;i++)
	{
		visited[i] = false; // 將標誌數組初始化(全局數組)
	}
	for(i=0;i<G->vexnum;i++)
	{
		if(!visied[i])
		{
			BFS(G,i); // 爲了避免非連通圖一些頂點訪問不到,若是連通圖只會執行一次。
		}
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章