2021.11.22 图

BFS(广度优先搜索算法)

bool visited[MAX_VERTEX_NUM]	; //标记是否被访问
void BFSTraverse(Graph G){
	for(i=0;i<G.vernum;i++) visited[i] = FALSE;//将元素全部标记为未被访问过
	InitQueue(Q); //初始化辅助队列Q					
	for(i=0;i<G.vernum;i++){ //从0号顶点开始遍历
		if(!visited[i]) BFS(G,i); //对每个连通分量调用一次BFS
	}
}

void BFS(Graph G,int v){ //从顶点v出发,广度优先遍历图G
	visit(v); //访问初始节点v
	visited[i] = TRUE;//对v做已访问标记
	EnQueue(Q,v);//顶点v入队列Q
	while(!IsEmpty(Q)){
		DeQueue(Q,v);//出队
		for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w)) //检测v所有的邻接点
			if(!visited[w]){ //w为v的尚未访问的邻接顶点
				visit(w); //访问顶点w
				visited[w] = TRUE;
				EnQueue(Q,w);//顶点w入队列
			}
	}
}

深度优先遍历

bool visited[MAX_VERTEX_NUM]; //访问标记数组
void DFSTraverse(Graph G){
	for(v=0;v<G.vernum;v++) visited[v]=FALSE; //初始化已访问标记数据
	for(v=0;v<vernum;v++){ //对每个连通分量调用一次DFS
		if(!visited[v]) 
			DFS(G,v);
	}
}

void DFS(Graph G,int v){
	visit(v);
	visited[v]=TRUE;
	for(w=FirstNeighbor(G,v);w>=0;w=NextNeighbor(G,v,w))
		if(!visited[w]){ //w为u的尚未访问的邻接顶点
			DFS(G,w);
		}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值