1 / 84

Graph Traversal

Graph Traversal. Discrete Mathematics and Its Applications Baojian Hua bjhua@ustc.edu.cn. BFS and DFS. BFS: breath first searching start from one vertex, near to far generates BFS forest flat DFS: depth first searching recursion and back-tracking generates DFS forest narrow.

scotthsmith
Télécharger la présentation

Graph Traversal

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Graph Traversal Discrete Mathematics and Its Applications Baojian Hua bjhua@ustc.edu.cn

  2. BFS and DFS • BFS: breath first searching • start from one vertex, near to far • generates BFS forest • flat • DFS: depth first searching • recursion and back-tracking • generates DFS forest • narrow

  3. “graph” ADT in C: Interface // in file “graph.h” #ifndef GRAPH_H #define GRAPH_H typedef struct graph *graph; typedef void (*tyVisit)(poly); graph newGraph (); void insertVertex (graph g, poly data); void insertEdge (graph g, poly from, poly to); void dfs (graph g, poly start, tyVisit visit); void bfs (graph g, poly start, tyVisit visit); // we’d see more later … #endif

  4. Sample Graph For BFS, associate each vertex with a “distance” property. distance(v): the number of edges from the vertex “start” to vertex “v”, with distance(start)=0 a b c d e f

  5. Sample Graph BFS bfs (g, “a”, strOutput); a b c d e f

  6. Sample Graph BFS bfs (g, “a”, strOutput); print a; a 0 b c d e f

  7. Sample Graph BFS bfs (g, “a”, strOutput); print a; // a choice print b; a 0 b 1 c d e f

  8. Sample Graph BFS bfs (g, “a”, strOutput); print a; // a choice print b; print d; a 0 b 1 c d 1 e f

  9. Sample Graph BFS bfs (g, “a”, strOutput); print a; // a choice print b; print d; print e; a 0 b 1 c d 1 e 2 f

  10. Sample Graph BFS bfs (g, “a”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; a 0 b 1 c 0 d 1 e 2 f

  11. Sample Graph BFS bfs (g, “a”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; print f; a 0 b 1 c 0 d 1 e 2 f 1

  12. BFS Algorithm bfs (vertex start, tyVisit visit){ queue q = newQueue (); setDistance (start, 0); //Invariant: all vertices in q have distance property enQueue (q, start); while (q not empty) { vertex current = deQueue (q); int dist = getDistance (current); visit (current); for (each adjacent vertex u of “current”){ if (not visited u){ setDistance (u, dist+1); enQueue (q, u); } }}}

  13. BFS Algorithm void bfsMain (graph g, poly start, tyVisit visit) { vertex startV = searchVertex (g, start); bfs (startV, visit); for (each vertex u in graph g) if (not visited u) bfs (q, u); }

  14. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); a 0 b c d e f Queue: a

  15. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); print a; a 0 b 1 c d 1 e f Queue: a Queue: b, d

  16. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); print a; // a choice print b; a 0 b 1 c d 1 e 2 f Queue: a Queue: b, d Queue: d, e

  17. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); print a; // a choice print b; print d; a 0 b 1 c d 1 e 2 f Queue: a Queue: b, d Queue: d, e Queue: e

  18. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); print a; // a choice print b; print d; print e; a 0 b 1 c 0 d 1 e 2 f Queue: a Queue: c Queue: b, d Queue: d, e Queue: e Queue:

  19. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; a 0 b 1 c 0 d 1 e 2 f 1 Queue: a Queue: c Queue: b, d Queue: f Queue: d, e Queue: e Queue:

  20. Sample Graph BFS // color convention: not visited, inQueue, deQueued bfs (g, “a”, strOutput); print a; // a choice print b; print d; print e; // a choice print c; print f; a 0 b 1 c 0 d 1 e 2 f 1 Queue: a Queue: c Queue: b, d Queue: f Queue: d, e Queue: e Queue: Queue:

  21. Sample Graph DFS Associate a “discover time” and a “finish time” with each vertex v with: discover (start) = 0 a b c d e f

  22. Sample Graph DFS dfs (g, “a”, strOutput); a b c d e f

  23. Sample Graph DFS dfs (g, “a”, strOutput); print a; a (0, ) b c d e f

  24. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; a (0, ) b (1, ) c d e f

  25. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; a (0, ) b (1, ) c d e (2, ) f

  26. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, ) e (2, ) f

  27. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, 4) e (2, ) f

  28. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, 4) e (2, 5) f

  29. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, 6) c d (3, 4) e (2, 5) f

  30. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, 7) b (1, 6) c d (3, 4) e (2, 5) f

  31. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c a (0, 7) b (1, 6) c (8, ) d (3, 4) e (2, 5) f

  32. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c print f a (0, 7) b (1, 6) c (8, ) d (3, 4) e (2, 5) f (9, )

  33. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c a (0, 7) b (1, 6) c (8, ) d (3, 4) e (2, 5) f (9, 10)

  34. Sample Graph DFS dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c a (0, 7) b (1, 6) c (8, 11) d (3, 4) e (2, 5) f (9, 10)

  35. DFS Algorithm dfs (vertex start, tyVisit visit, time time) { visit (start); setDiscover (start, time++); for (each adjacent vertex u of “start”) if (not visited u) dfs (u, visit, time); setFinish (start, time++); }

  36. DFS Algorithm void dfsMain (graph g, poly start, tyVisit visit) { vertex startV = searchVertex (g, start); time time = newTime (); dfs (startV, visit, time); for (each vertex u in graph g) if (not visited u) dfs (u, visit, time); }

  37. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; a (0, ) b c d e f dfs(a)

  38. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; a (0, ) b (1, ) c d e f dfs(a) => dfs(b)

  39. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; a (0, ) b (1, ) c d e (2, ) f dfs(a) => dfs(b) => dfs(e)

  40. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, ) e (2, ) f dfs(a) => dfs(b) => dfs(e) => dfs(d)

  41. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, natOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, ) e (2, ) f dfs(a) => dfs(b) => dfs(e) => dfs(d) => dfs(b)???

  42. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, 4) e (2, ) f dfs(a) => dfs(b) => dfs(e)

  43. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, ) c d (3, 4) e (2, 5) f dfs(a) => dfs(b)

  44. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, 6) c d (3, 4) e (2, 5) f dfs(a)

  45. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, 6) c d (3, 4) e (2, 5) f dfs(a) =>dfs(d)???

  46. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, ) b (1, 6) c d (3, 4) e (2, 5) f dfs(a)

  47. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; a (0, 7) b (1, 6) c d (3, 4) e (2, 5) f empty!

  48. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; a (0, 7) b (1, 6) c (8, ) d (3, 4) e (2, 5) f dfs(c)

  49. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; a (0, 7) b (1, 6) c (8, ) d (3, 4) e (2, 5) f dfs(c) => dsf(e)???

  50. Sample Graph DFS // color convention: not visited, discover, finish dfs (g, “a”, strOutput); print a; // a choice print b; print e; print d; // a choice print c; a (0, 7) b (1, 6) c (8, ) d (3, 4) e (2, 5) f dfs(c)

More Related