深度遍历类似于二叉树的先序遍历:遍历该节点后再遍历他的子节点;
广度遍历相当于二叉树的层次遍历:一层一层的遍历下去;
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语言代码)的全部内容,更多相关图内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复