使用递归实现BFS

时间:2014-12-08 18:02:19

标签: breadth-first-search directed-acyclic-graphs

在给定链表表示的情况下,如何使用递归实现BFS

我知道DFS可以使用递归实现,但不能使用BFS实现。请建议一种可能的方法?

2 个答案:

答案 0 :(得分:0)

请注意,[]代表一个列表。

f(graph, past_nodes, current_nodes, mark):
    new_nodes = all neighbors of current_nodes which are not in past_nodes
    if new_nodes == []:
        return
    else
        for each n in new_nodes:
            mark(n)
        f(graph, past_nodes union current_nodes, new_nodes, mark)

首先调用f(graph, [], [start_node], m),其中m是您希望以BFS顺序为每个节点运行的函数。

答案 1 :(得分:0)

void bfs(int vertex)
{
int p;
void mark(int);
 m=g[vertex];
 if(m->v==1)
 return;
 m->v=1;
 printf("%c ",m->a);
 while(m->link!=NULL)
         {
         m=m->link;
         if(m->v==0)
            {
             m->v=1;
             p=int(m->a)-65;
             mark(p);
            }
         }

 m=g[vertex];
 while(m->link!=NULL)
         {
         m=m->link;
         bfs(p);
          }
}

我被困在这里。