From 3abfdd7569fa8532f958b356ee37220d62a1b8fa Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Sun, 28 Jul 2024 18:15:33 +0530 Subject: [PATCH 1/7] Update 0001_BreadthFirstSearchTest.cc --- Tests/0003_Graph/0001_BreadthFirstSearchTest.cc | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc index a7e8f0f..5b984e2 100644 --- a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc +++ b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc @@ -5,7 +5,8 @@ // Demonstrate some basic assertions. namespace BreadthFirstSearchTest { - TEST(BFSTesting, ShowBFSResultTest) { + TEST(BFSTesting, ShowBFSResultTest01) + { BFSGraph graph; graph.PushUndirectedEdge('s', 'r'); @@ -25,4 +26,17 @@ namespace BreadthFirstSearchTest string expectedResult = " r(1) s(0) t(2) u(3) v(2) w(1) x(2) y(3)"; EXPECT_EQ(actualResult, expectedResult); } + + TEST(BFSTesting, ShowBFSResultTest02) + { + BFSGraph graph; + + graph.PushUndirectedEdge('s', 'r'); + + graph.BFS('s'); + + string actualResult = graph.ShowBFSResult(); + string expectedResult = " r(1) s(0)"; + EXPECT_EQ(actualResult, expectedResult); + } } \ No newline at end of file From 73b857c3c3f1718c9171f62c38e62133ce183df6 Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Sun, 28 Jul 2024 18:19:43 +0530 Subject: [PATCH 2/7] minor fix --- SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc index fa88deb..12d48a9 100644 --- a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc +++ b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc @@ -42,7 +42,7 @@ void BFSGraph::BreadthFirstSearch(Node* node) Node* currentNode = nodeQueue.front(); nodeQueue.pop(); - for (auto adjacentNode : this->_adjlist[currentNode]) + for (auto &adjacentNode : this->_adjlist[currentNode]) { if (adjacentNode->color == WHITE) { @@ -73,9 +73,9 @@ void BFSGraph::BFS(char value) string BFSGraph::ShowBFSResult() { string result = ""; - for (auto value : this->_nodeMap) + for (auto &node : this->_nodeMap) { - result = result + " " + value.first + "(" + to_string(value.second->distance) + ")"; + result = result + " " + node.first + "(" + to_string(node.second->distance) + ")"; } return result; } \ No newline at end of file From dc023cd3d3534de4b2eafb7f00fe9ceb369d55c1 Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Sun, 29 Sep 2024 00:56:53 +0530 Subject: [PATCH 3/7] unit helper added for vector of pair --- Headers/0003_Graph/0001_BreadthFirstSearch.h | 4 ++- Headers/0003_Graph/0002_DepthFirstSearch.h | 30 +++++++++++++++++++ .../0003_Graph/0001_BreadthFirstSearch.cc | 10 ++++--- .../0003_Graph/0002_DepthFirstSearch.cc | 0 SourceCodes/0003_Graph/CMakeLists.txt | 1 + Tests/0000_CommonUtilities/UnitTestHelper.h | 6 ++-- .../UnitTestHelperVectorOfPair.h | 27 +++++++++++++++++ .../0003_Graph/0001_BreadthFirstSearchTest.cc | 12 ++++---- Tests/0003_Graph/0002_DepthFirstSearchTest.cc | 7 +++++ Tests/0003_Graph/CMakeLists.txt | 15 ++++------ 10 files changed, 90 insertions(+), 22 deletions(-) create mode 100644 Headers/0003_Graph/0002_DepthFirstSearch.h create mode 100644 SourceCodes/0003_Graph/0002_DepthFirstSearch.cc create mode 100644 Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h create mode 100644 Tests/0003_Graph/0002_DepthFirstSearchTest.cc diff --git a/Headers/0003_Graph/0001_BreadthFirstSearch.h b/Headers/0003_Graph/0001_BreadthFirstSearch.h index bb670f1..388e125 100644 --- a/Headers/0003_Graph/0001_BreadthFirstSearch.h +++ b/Headers/0003_Graph/0001_BreadthFirstSearch.h @@ -2,7 +2,9 @@ #include #include +#include #include +#include using namespace std; enum color { WHITE, GRAY, BLACK }; @@ -26,5 +28,5 @@ class BFSGraph public: void PushUndirectedEdge(char valueU, char valueV); void BFS(char value); - string ShowBFSResult(); + vector> ShowBFSResult(); }; \ No newline at end of file diff --git a/Headers/0003_Graph/0002_DepthFirstSearch.h b/Headers/0003_Graph/0002_DepthFirstSearch.h new file mode 100644 index 0000000..cd027aa --- /dev/null +++ b/Headers/0003_Graph/0002_DepthFirstSearch.h @@ -0,0 +1,30 @@ +#pragma once + +#include +#include +#include +using namespace std; +enum color { WHITE, GRAY, BLACK }; + +class Node +{ +public: + char data; + int distance; + int color; + Node* parent; + Node(char value); +}; + +class DFSGraph +{ +private: + map> _adjlist; + map _nodeMap; + Node* MakeOrFindNode(char value); + void DepthFirstSearch(Node* node); +public: + void PushUndirectedEdge(char valueU, char valueV); + void DFS(char value); + string ShowDFSResult(); +}; \ No newline at end of file diff --git a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc index 12d48a9..b49a2ba 100644 --- a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc +++ b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc @@ -1,6 +1,8 @@ #include "../Headers/0003_Graph/0001_BreadthFirstSearch.h" #include #include +#include +#include #include #include using namespace std; @@ -70,12 +72,12 @@ void BFSGraph::BFS(char value) this->BreadthFirstSearch(this->_nodeMap[value]); } -string BFSGraph::ShowBFSResult() +vector> BFSGraph::ShowBFSResult() { - string result = ""; - for (auto &node : this->_nodeMap) + vector> result; + for (auto& node : this->_nodeMap) { - result = result + " " + node.first + "(" + to_string(node.second->distance) + ")"; + result.push_back(make_pair(node.first, node.second->distance)); } return result; } \ No newline at end of file diff --git a/SourceCodes/0003_Graph/0002_DepthFirstSearch.cc b/SourceCodes/0003_Graph/0002_DepthFirstSearch.cc new file mode 100644 index 0000000..e69de29 diff --git a/SourceCodes/0003_Graph/CMakeLists.txt b/SourceCodes/0003_Graph/CMakeLists.txt index 525b75d..4da8e98 100644 --- a/SourceCodes/0003_Graph/CMakeLists.txt +++ b/SourceCodes/0003_Graph/CMakeLists.txt @@ -1,6 +1,7 @@ # Specify the source files set(0003GRAPH_SOURCES 0001_BreadthFirstSearch.cc + 0002_DepthFirstSearch.cc ) # Create a library target diff --git a/Tests/0000_CommonUtilities/UnitTestHelper.h b/Tests/0000_CommonUtilities/UnitTestHelper.h index af1fbc0..d9b8474 100644 --- a/Tests/0000_CommonUtilities/UnitTestHelper.h +++ b/Tests/0000_CommonUtilities/UnitTestHelper.h @@ -9,14 +9,14 @@ template class UnitTestHelper { public: - string VerifyVectorResult(vector vector) + string VerifyVectorResult(vector& vector) { string result = ""; - for (auto iterator : vector) + for (auto& iterator : vector) { result += to_string(iterator) + " "; } result.pop_back(); return result; } -}; +}; \ No newline at end of file diff --git a/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h b/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h new file mode 100644 index 0000000..4d01efe --- /dev/null +++ b/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h @@ -0,0 +1,27 @@ +#pragma once + +#include +#include +#include +#include +using namespace std; + +template +class UnitTestHelperVectorOfPair +{ +public: + string VerifyVectorOfPair(vector> vector) + { + string result = ""; + for (auto& iterator : vector) + { + result += string(1, iterator.first) + "(" + to_string(iterator.second) + ")" + " "; + } + + if (!result.empty()) + { + result.pop_back(); + } + return result; + } +}; \ No newline at end of file diff --git a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc index 5b984e2..b87ad99 100644 --- a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc +++ b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc @@ -1,10 +1,12 @@ #include #include #include "../Headers/0003_Graph/0001_BreadthFirstSearch.h" +#include "../0000_CommonUtilities/UnitTestHelperVectorOfPair.h" -// Demonstrate some basic assertions. namespace BreadthFirstSearchTest { + UnitTestHelperVectorOfPair unitTestHelperVectorOfPair; + TEST(BFSTesting, ShowBFSResultTest01) { BFSGraph graph; @@ -22,8 +24,8 @@ namespace BreadthFirstSearchTest graph.BFS('s'); - string actualResult = graph.ShowBFSResult(); - string expectedResult = " r(1) s(0) t(2) u(3) v(2) w(1) x(2) y(3)"; + string actualResult = unitTestHelperVectorOfPair.VerifyVectorOfPair(graph.ShowBFSResult()); + string expectedResult = "r(1) s(0) t(2) u(3) v(2) w(1) x(2) y(3)"; EXPECT_EQ(actualResult, expectedResult); } @@ -35,8 +37,8 @@ namespace BreadthFirstSearchTest graph.BFS('s'); - string actualResult = graph.ShowBFSResult(); - string expectedResult = " r(1) s(0)"; + string actualResult = unitTestHelperVectorOfPair.VerifyVectorOfPair(graph.ShowBFSResult()); + string expectedResult = "r(1) s(0)"; EXPECT_EQ(actualResult, expectedResult); } } \ No newline at end of file diff --git a/Tests/0003_Graph/0002_DepthFirstSearchTest.cc b/Tests/0003_Graph/0002_DepthFirstSearchTest.cc new file mode 100644 index 0000000..1b5e4d0 --- /dev/null +++ b/Tests/0003_Graph/0002_DepthFirstSearchTest.cc @@ -0,0 +1,7 @@ +#include +#include "../Headers/0003_Graph/0002_DepthFirstSearch.h" + +namespace DepthFirstSearchTest +{ + +} \ No newline at end of file diff --git a/Tests/0003_Graph/CMakeLists.txt b/Tests/0003_Graph/CMakeLists.txt index 836aa3c..b42277b 100644 --- a/Tests/0003_Graph/CMakeLists.txt +++ b/Tests/0003_Graph/CMakeLists.txt @@ -11,19 +11,16 @@ FetchContent_MakeAvailable(googletest) enable_testing() add_executable( - 0003-Graph-Tests - 0001_BreadthFirstSearchTest.cc) - -target_link_libraries( - 0003-Graph-Tests - GTest::gtest_main + 0003GraphTests + 0001_BreadthFirstSearchTest.cc + 0002_DepthFirstSearchTest.cc ) target_link_libraries( - 0003-Graph-Tests + 0003GraphTests + GTest::gtest_main 0003GRAPH ) - include(GoogleTest) -gtest_discover_tests(0003-Graph-Tests) \ No newline at end of file +gtest_discover_tests(0003GraphTests) \ No newline at end of file From f6628dd9b77530b6d6bd0e35204f05271cc8b87a Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Sun, 29 Sep 2024 00:59:06 +0530 Subject: [PATCH 4/7] class name change in bfs code --- Headers/0003_Graph/0001_BreadthFirstSearch.h | 2 +- SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc | 10 +++++----- Tests/0003_Graph/0001_BreadthFirstSearchTest.cc | 4 ++-- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Headers/0003_Graph/0001_BreadthFirstSearch.h b/Headers/0003_Graph/0001_BreadthFirstSearch.h index 388e125..16d2c89 100644 --- a/Headers/0003_Graph/0001_BreadthFirstSearch.h +++ b/Headers/0003_Graph/0001_BreadthFirstSearch.h @@ -18,7 +18,7 @@ class Node Node(char value); }; -class BFSGraph +class Graph { private: map> _adjlist; diff --git a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc index b49a2ba..acbb7e6 100644 --- a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc +++ b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc @@ -15,7 +15,7 @@ Node::Node(char value) parent = NULL; } -Node* BFSGraph::MakeOrFindNode(char value) +Node* Graph::MakeOrFindNode(char value) { Node* node = NULL; if (this->_nodeMap.find(value) == this->_nodeMap.end()) @@ -30,7 +30,7 @@ Node* BFSGraph::MakeOrFindNode(char value) return node; } -void BFSGraph::BreadthFirstSearch(Node* node) +void Graph::BreadthFirstSearch(Node* node) { node->color = WHITE; node->distance = 0; @@ -58,7 +58,7 @@ void BFSGraph::BreadthFirstSearch(Node* node) } } -void BFSGraph::PushUndirectedEdge(char valueU, char valueV) +void Graph::PushUndirectedEdge(char valueU, char valueV) { Node* nodeU = this->MakeOrFindNode(valueU); Node* nodeV = this->MakeOrFindNode(valueV); @@ -67,12 +67,12 @@ void BFSGraph::PushUndirectedEdge(char valueU, char valueV) this->_adjlist[nodeV].push_back(nodeU); } -void BFSGraph::BFS(char value) +void Graph::BFS(char value) { this->BreadthFirstSearch(this->_nodeMap[value]); } -vector> BFSGraph::ShowBFSResult() +vector> Graph::ShowBFSResult() { vector> result; for (auto& node : this->_nodeMap) diff --git a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc index b87ad99..7e684b8 100644 --- a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc +++ b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc @@ -9,7 +9,7 @@ namespace BreadthFirstSearchTest TEST(BFSTesting, ShowBFSResultTest01) { - BFSGraph graph; + Graph graph; graph.PushUndirectedEdge('s', 'r'); graph.PushUndirectedEdge('s', 'w'); @@ -31,7 +31,7 @@ namespace BreadthFirstSearchTest TEST(BFSTesting, ShowBFSResultTest02) { - BFSGraph graph; + Graph graph; graph.PushUndirectedEdge('s', 'r'); From 393df22caa412068d400a64a9652eb242606e35e Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Mon, 7 Oct 2024 23:39:38 +0530 Subject: [PATCH 5/7] dfs logic, and test added --- Headers/0003_Graph/0002_DepthFirstSearch.h | 25 +++--- .../0003_Graph/0001_BreadthFirstSearch.cc | 10 +-- .../0003_Graph/0002_DepthFirstSearch.cc | 76 +++++++++++++++++++ .../UnitTestHelperVectorOfPair.h | 15 ++++ Tests/0003_Graph/0002_DepthFirstSearchTest.cc | 21 +++++ 5 files changed, 131 insertions(+), 16 deletions(-) diff --git a/Headers/0003_Graph/0002_DepthFirstSearch.h b/Headers/0003_Graph/0002_DepthFirstSearch.h index cd027aa..d3b7544 100644 --- a/Headers/0003_Graph/0002_DepthFirstSearch.h +++ b/Headers/0003_Graph/0002_DepthFirstSearch.h @@ -3,28 +3,31 @@ #include #include #include +#include using namespace std; enum color { WHITE, GRAY, BLACK }; -class Node +class DFSNode { public: char data; - int distance; int color; - Node* parent; - Node(char value); + int discoveredTime; + int finishingTime; + DFSNode* parent; + DFSNode(char value); }; class DFSGraph { private: - map> _adjlist; - map _nodeMap; - Node* MakeOrFindNode(char value); - void DepthFirstSearch(Node* node); + int time; + map> _adjlist; + map _nodeMap; + DFSNode* MakeOrFindNode(char value); + void DepthFirstSearch(DFSNode* DFSNode); public: - void PushUndirectedEdge(char valueU, char valueV); - void DFS(char value); - string ShowDFSResult(); + void PushDirectedEdge(char valueU, char valueV); + void DFS(); + vector>> ShowDFSResult(); }; \ No newline at end of file diff --git a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc index acbb7e6..de36a4a 100644 --- a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc +++ b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc @@ -10,14 +10,14 @@ using namespace std; Node::Node(char value) { this->data = value; - distance = INT_MAX; - color = WHITE; - parent = NULL; + this->distance = INT_MAX; + this->color = WHITE; + this->parent = nullptr; } Node* Graph::MakeOrFindNode(char value) { - Node* node = NULL; + Node* node = nullptr; if (this->_nodeMap.find(value) == this->_nodeMap.end()) { node = new Node(value); @@ -34,7 +34,7 @@ void Graph::BreadthFirstSearch(Node* node) { node->color = WHITE; node->distance = 0; - node->parent = NULL; + node->parent = nullptr; queue nodeQueue; nodeQueue.push(node); diff --git a/SourceCodes/0003_Graph/0002_DepthFirstSearch.cc b/SourceCodes/0003_Graph/0002_DepthFirstSearch.cc index e69de29..c5641d9 100644 --- a/SourceCodes/0003_Graph/0002_DepthFirstSearch.cc +++ b/SourceCodes/0003_Graph/0002_DepthFirstSearch.cc @@ -0,0 +1,76 @@ +#include "../Headers/0003_Graph/0002_DepthFirstSearch.h" +#include +#include +#include +using namespace std; + +DFSNode::DFSNode(char value) +{ + this->data = value; + this->discoveredTime = INT_MAX; + this->finishingTime = INT_MAX; + this->color = WHITE; + this->parent = nullptr; +} + +DFSNode* DFSGraph::MakeOrFindNode(char value) +{ + DFSNode* node = nullptr; + if (this->_nodeMap.find(value) == this->_nodeMap.end()) + { + node = new DFSNode(value); + this->_nodeMap[value] = node; + } + else + { + node = this->_nodeMap[value]; + } + return node; +} +void DFSGraph::DepthFirstSearch(DFSNode* nodeU) +{ + this->time++; + nodeU->discoveredTime = this->time; + nodeU->color = GRAY; + for (auto nodeV : this->_adjlist[nodeU]) + { + if (nodeV->color == WHITE) + { + nodeV->parent = nodeU; + this->DepthFirstSearch(nodeV); + } + } + nodeU->color = BLACK; + this->time++; + nodeU->finishingTime = time; +} + +void DFSGraph::PushDirectedEdge(char valueU, char valueV) +{ + DFSNode* nodeU = this->MakeOrFindNode(valueU); + DFSNode* nodeV = this->MakeOrFindNode(valueV); + + this->_adjlist[nodeU].push_back(nodeV); +} + +void DFSGraph::DFS() +{ + this->time = 0; + for (auto& iterator:this->_nodeMap) + { + if (iterator.second->color == WHITE) + { + this->DepthFirstSearch(iterator.second); + } + } +} + +vector>> DFSGraph::ShowDFSResult() +{ + vector>> result; + for (auto& node : this->_nodeMap) + { + result.push_back(make_pair(node.first, make_pair(node.second->discoveredTime, node.second->finishingTime))); + } + return result; +} \ No newline at end of file diff --git a/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h b/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h index 4d01efe..f2deab1 100644 --- a/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h +++ b/Tests/0000_CommonUtilities/UnitTestHelperVectorOfPair.h @@ -24,4 +24,19 @@ class UnitTestHelperVectorOfPair } return result; } + + string VerifyVectorOfPairOfTwo(vector>> vector) + { + string result = ""; + for (auto& iterator : vector) + { + result += string(1, iterator.first) + "(" + to_string(iterator.second.first) + "," + to_string(iterator.second.second) + ")" + " "; + } + + if (!result.empty()) + { + result.pop_back(); + } + return result; + } }; \ No newline at end of file diff --git a/Tests/0003_Graph/0002_DepthFirstSearchTest.cc b/Tests/0003_Graph/0002_DepthFirstSearchTest.cc index 1b5e4d0..34083bc 100644 --- a/Tests/0003_Graph/0002_DepthFirstSearchTest.cc +++ b/Tests/0003_Graph/0002_DepthFirstSearchTest.cc @@ -1,7 +1,28 @@ #include #include "../Headers/0003_Graph/0002_DepthFirstSearch.h" +#include "../0000_CommonUtilities/UnitTestHelperVectorOfPair.h" namespace DepthFirstSearchTest { + UnitTestHelperVectorOfPair unitTestHelperVectorOfPair; + TEST(DFSTesting, ShowDFSResultTest01) + { + DFSGraph graph; + + graph.PushDirectedEdge('u', 'v'); + graph.PushDirectedEdge('u', 'x'); + graph.PushDirectedEdge('v', 'y'); + graph.PushDirectedEdge('w', 'y'); + graph.PushDirectedEdge('w', 'z'); + graph.PushDirectedEdge('x', 'v'); + graph.PushDirectedEdge('y', 'x'); + graph.PushDirectedEdge('z', 'z'); + + graph.DFS(); + + string actualResult = unitTestHelperVectorOfPair.VerifyVectorOfPairOfTwo(graph.ShowDFSResult()); + string expectedResult = "u(1,8) v(2,7) w(9,12) x(4,5) y(3,6) z(10,11)"; + EXPECT_EQ(actualResult, expectedResult); + } } \ No newline at end of file From 02f1ecaf4e837ed295a98a45a28a68599fe53e7f Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Tue, 8 Oct 2024 00:59:15 +0530 Subject: [PATCH 6/7] BFS graph class name changes --- Headers/0003_Graph/0001_BreadthFirstSearch.h | 16 ++++++------- .../0003_Graph/0001_BreadthFirstSearch.cc | 24 +++++++++---------- .../0003_Graph/0001_BreadthFirstSearchTest.cc | 4 ++-- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/Headers/0003_Graph/0001_BreadthFirstSearch.h b/Headers/0003_Graph/0001_BreadthFirstSearch.h index 16d2c89..6f5326e 100644 --- a/Headers/0003_Graph/0001_BreadthFirstSearch.h +++ b/Headers/0003_Graph/0001_BreadthFirstSearch.h @@ -8,23 +8,23 @@ using namespace std; enum color { WHITE, GRAY, BLACK }; -class Node +class BFSNode { public: char data; int distance; int color; - Node* parent; - Node(char value); + BFSNode* parent; + BFSNode(char value); }; -class Graph +class BFSGraph { private: - map> _adjlist; - map _nodeMap; - Node* MakeOrFindNode(char value); - void BreadthFirstSearch(Node* node); + map> _adjlist; + map _nodeMap; + BFSNode* MakeOrFindNode(char value); + void BreadthFirstSearch(BFSNode* node); public: void PushUndirectedEdge(char valueU, char valueV); void BFS(char value); diff --git a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc index de36a4a..d88c04f 100644 --- a/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc +++ b/SourceCodes/0003_Graph/0001_BreadthFirstSearch.cc @@ -7,7 +7,7 @@ #include using namespace std; -Node::Node(char value) +BFSNode::BFSNode(char value) { this->data = value; this->distance = INT_MAX; @@ -15,12 +15,12 @@ Node::Node(char value) this->parent = nullptr; } -Node* Graph::MakeOrFindNode(char value) +BFSNode* BFSGraph::MakeOrFindNode(char value) { - Node* node = nullptr; + BFSNode* node = nullptr; if (this->_nodeMap.find(value) == this->_nodeMap.end()) { - node = new Node(value); + node = new BFSNode(value); this->_nodeMap[value] = node; } else @@ -30,18 +30,18 @@ Node* Graph::MakeOrFindNode(char value) return node; } -void Graph::BreadthFirstSearch(Node* node) +void BFSGraph::BreadthFirstSearch(BFSNode* node) { node->color = WHITE; node->distance = 0; node->parent = nullptr; - queue nodeQueue; + queue nodeQueue; nodeQueue.push(node); while (nodeQueue.empty()!=true) { - Node* currentNode = nodeQueue.front(); + BFSNode* currentNode = nodeQueue.front(); nodeQueue.pop(); for (auto &adjacentNode : this->_adjlist[currentNode]) @@ -58,21 +58,21 @@ void Graph::BreadthFirstSearch(Node* node) } } -void Graph::PushUndirectedEdge(char valueU, char valueV) +void BFSGraph::PushUndirectedEdge(char valueU, char valueV) { - Node* nodeU = this->MakeOrFindNode(valueU); - Node* nodeV = this->MakeOrFindNode(valueV); + BFSNode* nodeU = this->MakeOrFindNode(valueU); + BFSNode* nodeV = this->MakeOrFindNode(valueV); this->_adjlist[nodeU].push_back(nodeV); this->_adjlist[nodeV].push_back(nodeU); } -void Graph::BFS(char value) +void BFSGraph::BFS(char value) { this->BreadthFirstSearch(this->_nodeMap[value]); } -vector> Graph::ShowBFSResult() +vector> BFSGraph::ShowBFSResult() { vector> result; for (auto& node : this->_nodeMap) diff --git a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc index 7e684b8..b87ad99 100644 --- a/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc +++ b/Tests/0003_Graph/0001_BreadthFirstSearchTest.cc @@ -9,7 +9,7 @@ namespace BreadthFirstSearchTest TEST(BFSTesting, ShowBFSResultTest01) { - Graph graph; + BFSGraph graph; graph.PushUndirectedEdge('s', 'r'); graph.PushUndirectedEdge('s', 'w'); @@ -31,7 +31,7 @@ namespace BreadthFirstSearchTest TEST(BFSTesting, ShowBFSResultTest02) { - Graph graph; + BFSGraph graph; graph.PushUndirectedEdge('s', 'r'); From 482882724438aabe8dfdb0467c496fc741e173f6 Mon Sep 17 00:00:00 2001 From: Debashis Nandi Date: Tue, 8 Oct 2024 01:04:35 +0530 Subject: [PATCH 7/7] Update UnitTestHelper.h --- Tests/0000_CommonUtilities/UnitTestHelper.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tests/0000_CommonUtilities/UnitTestHelper.h b/Tests/0000_CommonUtilities/UnitTestHelper.h index d9b8474..f6c24aa 100644 --- a/Tests/0000_CommonUtilities/UnitTestHelper.h +++ b/Tests/0000_CommonUtilities/UnitTestHelper.h @@ -9,7 +9,7 @@ template class UnitTestHelper { public: - string VerifyVectorResult(vector& vector) + string VerifyVectorResult(vector vector) { string result = ""; for (auto& iterator : vector)