标签:
上一篇写了DFS的邻接矩阵和邻接表的,这篇再写一下BFS的
先大概讲一下BFS , 全名广度优先搜索,没有回溯和探查,逐层遍历,采用队列实现
先访问当前顶点v, 然后访问v的各个未被访问过的邻接顶点,然后在一次访问v的各个邻接顶点的未被访问的邻接顶点
代码实现如下 :
void BFS (Graph &G , int v ) { int i , w , n = G.Number(); //取出顶点个数 bool * visit = new bool [n] ; for( i =0 ;i< n ; i++) { visit[i] =false ; int loc = G.getVertexPos(v) ; cout << G.getValue(loc) <<endl ; visit[loc] = true ;//第一个顶点访问过了 Queue Q ; Q.EnQueue(loc) ;//进队列 while (! Q.IsEmpty()) { Q.DeQueue(loc) ; w = G.getFirstNeig(loc) ; while (w != -1) { if(visit[w] ==false) { cout << G.getValue(w) <<"" ; visit[w] = true ; Q.EnQueue (w) ; } w = G.getNextNeig(loc , w ) ; } } delete []visit ; } }
标签:
原文地址:http://blog.csdn.net/hhooong/article/details/43604567