深度遍历类似于二叉树的先序遍历:遍历该节点后再遍历他的子节点;
广度遍历相当于二叉树的层次遍历:一层一层的遍历下去;
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);
}