GraphAlgo.cpp 929 B

12345678910111213141516171819202122232425262728293031323334353637
  1. #include "GraphAlgo.h"
  2. #include <queue>
  3. using namespace std;
  4. bool DFS::connected(GraphNode* begin, GraphNode* end) {
  5. visited.clear(); return connected(begin, end, 0);
  6. }
  7. bool DFS::connected(GraphNode* begin, GraphNode* 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(GraphNode* begin, GraphNode* end) {
  19. deque <GraphNode*> nodes;
  20. nodes.push_back(begin);
  21. set<GraphNode*> visited;
  22. while (!nodes.empty()) {
  23. GraphNode* 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. }