概述
深度遍历类似于二叉树的先序遍历:遍历该节点后再遍历他的子节点;
广度遍历相当于二叉树的层次遍历:一层一层的遍历下去;
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语言代码)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复