FS.cpp 936 B

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