我是靠谱客的博主 耍酷小鸽子,最近开发中收集的这篇文章主要介绍图的深度与广度遍历(C语言代码),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

深度遍历类似于二叉树的先序遍历:遍历该节点后再遍历他的子节点;
广度遍历相当于二叉树的层次遍历:一层一层的遍历下去;

void DFS(Graph *pg,int v,bool visited[]){
	visited[v] = true;
	printf("%c ",pg->vertex[v].key);
	ENode *node = pg->vertex[v].enodes;
	while(node != NULL){
		int pos = get_position(pg,node->key);	
		if(!visited[pos])
			DFS(pg,pos,visited);
		node = node->next;
	}
}
//深度遍历 DFS
void graph_dfs(Graph *pg){
	printf("深度遍历:");
	bool visited[pg->vertexnum];
	int i = 0;
	for(i=0;i<pg->vertexnum;i++){
		visited[i] = false;//该顶点没有遍历	
	}
	for(i=0;i<pg->vertexnum;i++){
		if(!visited[i]){
			DFS(pg,i,visited);
		}
	}
	printf("n");
}
//广度遍历 BFS
void graph_bfs(Graph *pg){
	printf("广度遍历:");
	Queue que;
	queue_init(&que,pg->vertexnum);
	bool visited[pg->vertexnum];
	int i=0;
	for(i=0;i<pg->vertexnum;i++){
		visited[i] = false;	//顶点没有遍历
	}
	for(i=0;i<pg->vertexnum;i++){
		if(!visited[i]){//顶点没有遍历
			visited[i] = true;//设置为已经遍历
			queue_push(&que,i);
			while(!queue_is_empty(&que)){
				int v = queue_pop(&que);	
				printf("%c ",pg->vertex[v].key);
				ENode *node = pg->vertex[v].enodes;
				while(node != NULL){
					int pos = get_position(pg,node->key);
					if(!visited[pos]){
						visited[pos] = true;
						queue_push(&que,pos);
					}
					node = node->next;
				}
			}
		}
	}
	printf("n");
	queue_destroy(&que);
}

最后

以上就是耍酷小鸽子为你收集整理的图的深度与广度遍历(C语言代码)的全部内容,希望文章能够帮你解决图的深度与广度遍历(C语言代码)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(36)

评论列表共有 0 条评论

立即
投稿
返回
顶部