DFS BFS 示例 以及BFS部分算法代码

上一篇写了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++语言描述)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值