上一篇写了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 ;
}
}
代码是在文本上写得,可能不是很规范,大概跟书上是一样的,书名是:数据结构(用面向对象方法与C++语言描述)