FS.cpp 920 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. #include "graph.h"
  2. #include <queue>
  3. using namespace std;
  4. bool DFS::connected(Node* begin, Node* end) {
  5. visited.clear(); return connected(begin, end, 0);
  6. }
  7. bool DFS::connected(Node* begin, Node* end, int depth) {
  8. if (begin == end) return true;
  9. visited.insert(begin);
  10. for (node_iterator it = begin->nb_begin();
  11. it != begin->nb_end(); it++) {
  12. if (visited.find(*it) == visited.end()) {
  13. if (connected(*it, end, depth + 1)) return true;
  14. }
  15. }
  16. return false;
  17. }
  18. bool BFS::connected(Node* begin, Node* end) {
  19. deque <Node*> nodes;
  20. nodes.push_back(begin);
  21. set<Node*> visited;
  22. while (!nodes.empty()) {
  23. Node* next = nodes.front(); nodes.pop_front();
  24. if (end == next) return true;
  25. visited.insert(next);
  26. for (node_iterator it = next->nb_begin();
  27. it != next->nb_end(); it++)
  28. if (visited.find(*it) == visited.end())
  29. nodes.push_back(*it);
  30. }
  31. return false;
  32. }