Breadth First Search and Depth First Search

后端 未结 11 1687
悲&欢浪女
悲&欢浪女 2020-12-24 02:46

Can anybody give a link for a simple explanation on BFS and DFS with its implementation?

相关标签:
11条回答
  • 2020-12-24 03:01

    snippet with 2 pointers.

    void BFS(int v,struct Node **p)
    {
         struct Node *u;
    
         visited[v-1] = TRUE;
         printf("%d\t",v);
         AddQueue(v);
    
         while(IsEmpty() == FALSE)
         {
             v = DeleteQueue();
             u = *(p+v-1);
    
             while(u!=NULL)
             {
                if(visited(u->data -1) == FALSE)
                {
                      AddQueue(u->data);
                      visited[u->data -1]=TRUE;
                      printf("%d\t",u->data);
                }
    
                u = u->next;
             }
         }
    }
    
    0 讨论(0)
  • 2020-12-24 03:04

    Heres the idea in basics:

    get a new queue ...initalize it with the root node .... loop through the entire queue and keep removing an item from the queue and printing it out (or saving it etc) and check if the same item has any children , if so push them onto the queue and continue in the loop until you traverse the entire segment(graph)...

    0 讨论(0)
  • 2020-12-24 03:06

    Say you have a tree as follows:

    It may be a little confusing because E is both a child of A and F but it helps illustrate the depth in a depth first search. A depth first search searches the tree going as deep (hence the term depth) as it can first. So the traversal left to right would be A, B, D, F, E, C, G.

    A breadth first search evaluates all the children first before proceeding to the children of the children. So the same tree would go A, B, C, E, D, F, G.

    Hope this helps.

    0 讨论(0)
  • 2020-12-24 03:09

    you can find everything on wiki:

    BFS and DFS

    this link can be useful too. if you want an implementation go to: c++ boost library: DFS

    0 讨论(0)
  • 2020-12-24 03:13

    Lets say you are given the following structure:

    Format: Node [Children]
    
    A [B C D]
    B [E F]
    C [G]
    D []
    E []
    F []
    G []
    

    A breadth first search visits all of a node's children before visiting their children. Here's the pseudocode and the solution for the above structure:

    1. Enqueue root node.
    2. Dequeue and output. If the queue is empty, go to step 5.
    3. Enqueue the dequeued node's children.
    4. Go to Step 2.
    5. Done
    
    Two queues: (Active Node) [Output] [Working Set]
    Starting with root:
    ( ) []              [A]
    (A) [A]             [B C D] 
    (B) [A B]           [C D E F] 
    (C) [A B C]         [D E F G] 
    (D) [A B C D]       [E F G] 
    (E) [A B C D E]     [F G] 
    (F) [A B C D E F]   [G] 
    (G) [A B C D E F G] [] 
    
    Done
    

    A depth first search visits the lowest level (deepest children) of the tree first instead. There are two types of depth first search: pre-order and post-order. This just differentiates between when you add the node to the output (when you visit it vs leave it).

        var rootNode = structure.getRoot();
        var preOrder = new Array();
        var postOrder = new Array();
        function DepthFirst( rootNode ){
            // Pre-order
            preOrder[ preOrder.length ] = rootNode;
    
            for( var child in rootNode ){
                DepthFirst( child );
            }
    
            // Post-order
            postOrder[ postOrder.length ] = rootNode;
        }
    
    Pre-order:
    * A B E F C G D
    
    Post-order:
    * E F B G C D A
    
    0 讨论(0)
提交回复
热议问题