Download
graph traversal n.
Skip this Video
Loading SlideShow in 5 Seconds..
Graph Traversal PowerPoint Presentation
Download Presentation
Graph Traversal

Graph Traversal

415 Vues Download Presentation
Télécharger la présentation

Graph Traversal

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. Graph Traversal Text • Weiss, § 9.6 Depth-First Search • Think Stack Breadth-First Search • Think Queue

  2. Overview • Goal • To systematically visit the nodes of a graph • A tree is a directed, acyclic, graph (DAG) • If the graph is a tree, • DFS is exhibited by preorder, postorder, and (for binary trees) inorder traversals • BFS is exhibited by level-order traversal

  3. Depth-First Search // recursive, preorder, depth-first search void dfs (Node v) { if (v == null) return; if (v not yet visited) visit&mark(v); // visit node before adjacent nodes for (each w adjacent to v) if (w has not yet been visited) dfs(w); } // dfs

  4. Depth-First Search // recursive, postorder, depth-first search void dfs (Node v) { if (v == null) return; tag(v); // mark v as having been considered for (each w adjacent to v) if (w has not yet been tagged) dfs(w); visit(v); // postorder traversal: visit node after // adjacent nodes } // dfs

  5. Depth-First Search // non-recursive, preorder, depth-first search void dfs (Node v) { if (v == null) return; push(v); while (stack is not empty) { pop(v); if (v has not yet been visited) mark&visit(v); for (each w adjacent to v) if (w has not yet been visited) push(w); } // while } // dfs

  6. Depth-First Search // non-recursive, postorder, depth-first search void dfs (Node v) { // Lex 20 (Do not need to submit) } // dfs

  7. Example 5 2 0 1 3 7 4 6 Policy: Visit adjacent nodes in increasing index order

  8. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 5 1 0 3 2 7 6 4

  9. Preorder DFS: Start with Node 5 5 5 2 0 1 3 7 4 6 Push 5

  10. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 Pop/Visit/Mark 5 5

  11. Preorder DFS: Start with Node 5 1 2 5 2 0 1 3 7 4 6 Push 2, Push 1 5

  12. Preorder DFS: Start with Node 5 2 5 2 0 1 3 7 4 6 Pop/Visit/Mark 1 5 1

  13. Preorder DFS: Start with Node 5 0 2 4 2 5 2 0 1 3 7 4 6 Push 4, Push 2, Push 0 5 1

  14. Preorder DFS: Start with Node 5 2 4 2 5 2 0 1 3 7 4 6 Pop/Visit/Mark 0 5 1 0

  15. Preorder DFS: Start with Node 5 3 7 2 4 2 5 2 0 1 3 7 4 6 Push 7, Push 3 5 1 0

  16. Preorder DFS: Start with Node 5 7 2 4 2 5 2 0 1 3 7 4 6 Pop/Visit/Mark 3 5 1 0 3

  17. Preorder DFS: Start with Node 5 2 7 2 4 2 5 2 0 1 3 7 4 6 Push 2 5 1 0 3

  18. Preorder DFS: Start with Node 5 7 2 4 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 2 5 1 0 3 2

  19. Preorder DFS: Start with Node 5 2 4 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 7 5 1 0 3 2 7

  20. Preorder DFS: Start with Node 5 6 2 4 2 5 2 0 1 3 7 4 6 Push 6 5 1 0 3 2 7

  21. Preorder DFS: Start with Node 5 2 4 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 6 5 1 0 3 2 7 6

  22. Preorder DFS: Start with Node 5 4 2 5 2 0 1 3 7 4 6 Pop (don’t visit) 2 5 1 0 3 2 7 6

  23. Preorder DFS: Start with Node 5 2 5 2 0 1 3 7 4 6 Pop/Mark/Visit 4 5 1 0 3 2 7 6 4

  24. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 Pop (don’t visit) 2 5 1 0 3 2 7 6 4

  25. Preorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 Done 5 1 0 3 2 7 6 4

  26. Preorder DFS: Start with Node 5Note: edge (0,3) removed 5 2 0 1 3 7 4 6 5 1 0 7 6 2 4 3

  27. Depth-First SearchPolicy: Don’t push nodes twice // non-recursive, preorder, depth-first search void dfs (Node v) { if (v == null) return; push(v); while (stack is not empty) { pop(v); if (v has not yet been visited) mark&visit(v); for (each w adjacent to v) if (w has not yet been visited && not yet stacked) push(w); } // while } // dfs

  28. Preorder DFS (Don’t push nodes twice). Start with Node 5 5 2 0 1 3 7 4 6 5 1 0 3 7 6 4 2

  29. Postorder DFS: Start with Node 5 5 2 0 1 3 7 4 6 2 3 6 7 0 4 1 5

  30. Breadth-first Search • Ripples in a pond • Visit designated node • Then visited unvisited nodes a distance i away, where i = 1, 2, 3, etc. • For nodes the same distance away, visit nodes in systematic manner (eg. increasing index order)

  31. Breadth-First Search // non-recursive, preorder, breadth-first search void bfs (Node v) { if (v == null) return; enqueue(v); while (queue is not empty) { dequeue(v); if (v has not yet been visited) mark&visit(v); for (each w adjacent to v) if (w has not yet been visited && has not been queued) enqueue(w); } // while } // bfs

  32. BFS: Start with Node 5 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7 6

  33. BFS: Start with Node 5 5 2 0 1 3 7 4 6 5

  34. BFS: Node one-away 5 2 0 1 3 7 4 6 5

  35. BFS: Visit 1 and 2 5 2 0 1 3 7 4 6 5 1 2

  36. BFS: Nodes two-away 5 2 0 1 3 7 4 6 5 1 2

  37. BFS: Visit 0 and 4 5 2 0 1 3 7 4 6 5 1 2 0 4

  38. BFS: Nodes three-away 5 2 0 1 3 7 4 6 5 1 2 0 4

  39. BFS: Visit nodes 3 and 7 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7

  40. BFS: Node four-away 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7

  41. BFS: Visit 6 5 2 0 1 3 7 4 6 5 1 2 0 4 3 7 6