diff --git a/algorithm.xcodeproj/project.xcworkspace/xcuserdata/aseshshrestha.xcuserdatad/UserInterfaceState.xcuserstate b/algorithm.xcodeproj/project.xcworkspace/xcuserdata/aseshshrestha.xcuserdatad/UserInterfaceState.xcuserstate
index bfc2c76..46343b3 100755
Binary files a/algorithm.xcodeproj/project.xcworkspace/xcuserdata/aseshshrestha.xcuserdatad/UserInterfaceState.xcuserstate and b/algorithm.xcodeproj/project.xcworkspace/xcuserdata/aseshshrestha.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/algorithm.xcodeproj/xcuserdata/aseshshrestha.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/algorithm.xcodeproj/xcuserdata/aseshshrestha.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
index 8cc697a..3a51261 100755
--- a/algorithm.xcodeproj/xcuserdata/aseshshrestha.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
+++ b/algorithm.xcodeproj/xcuserdata/aseshshrestha.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -14,8 +14,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "345"
- endingLineNumber = "345"
+ startingLineNumber = "350"
+ endingLineNumber = "350"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -30,8 +30,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "311"
- endingLineNumber = "311"
+ startingLineNumber = "316"
+ endingLineNumber = "316"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -46,8 +46,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "236"
- endingLineNumber = "236"
+ startingLineNumber = "241"
+ endingLineNumber = "241"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -62,8 +62,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "204"
- endingLineNumber = "204"
+ startingLineNumber = "209"
+ endingLineNumber = "209"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -174,8 +174,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "162"
- endingLineNumber = "162"
+ startingLineNumber = "167"
+ endingLineNumber = "167"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -190,8 +190,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "125"
- endingLineNumber = "125"
+ startingLineNumber = "130"
+ endingLineNumber = "130"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -206,8 +206,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "84"
- endingLineNumber = "84"
+ startingLineNumber = "89"
+ endingLineNumber = "89"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -238,8 +238,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "73"
- endingLineNumber = "73"
+ startingLineNumber = "78"
+ endingLineNumber = "78"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -254,8 +254,8 @@
filePath = "algorithm/main.cpp"
startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807"
- startingLineNumber = "59"
- endingLineNumber = "59"
+ startingLineNumber = "64"
+ endingLineNumber = "64"
landmarkName = "main(argc, argv)"
landmarkType = "9">
@@ -263,17 +263,154 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/algorithm/graph_algorithm.cpp b/algorithm/graph_algorithm.cpp
index 28be1d6..3c7483f 100644
--- a/algorithm/graph_algorithm.cpp
+++ b/algorithm/graph_algorithm.cpp
@@ -9,29 +9,85 @@
#include "header.h"
#include "graph_algorithm.h"
-void create_directed_graph() {
- // Adjanceny list representation of graph
+void create_undirected_graph() {
+ // Adjacency list representation of graph
/*
-
3 - 8 - 6 - 9 - 11 - 10
| | | |
1 - 7 - 0 - 12 - 19 - 17
| | | |
4 - 5 - 13 - 18 - 20
+ */
+ std::unordered_map> undirected_graph = {
+ {3, {1, 8}},
+ {8, {3, 6}},
+ {6, {8, 9, 0}},
+ {9, {6, 11, 12}},
+ {11, {9, 10}},
+ {10, {11, 17}},
+ {1, {3, 7}},
+ {7, {0, 1, 5}},
+ {0, {6, 7, 12, 13}},
+ {12, {0, 9, 18, 19}},
+ {19, {12, 17, 20}},
+ {17, {10, 19}},
+ {4, {5}},
+ {5, {4, 7, 13}},
+ {13, {0, 5, 18}},
+ {18, {12, 13, 20}},
+ {20, {18, 19}}
+ };
+
+ CBaseGraph undi_graph(std::move(undirected_graph));
+ undi_graph.traverse_bfs(3);
+ undi_graph.traverse_dfs(7);
+}
+
+void create_directed_graph() {
+ // Adjanceny list representation of directed graph
+ /*
+ 3 -> 8 -> 6 -> 9 -> 11 -> 10
+ | | | |
+ 1 -> 7 -> 0 -> 12 -> 19 -> 17
+ | | | |
+ 4 <- 5 <- 13 <- 18 <- 20
Adjacency list:
Node Adjacent nodes
3 8 - 1
- 8 3 - 6
- 6 8 - 9 - 0
- 0 6 - 7 - 12 - 13
- ...
- 20 18 - 19
+ 8 6
+ 6 9 - 0
+ 9 11 - 12
+ 11 10
+ 10 17
+ 1 7
+ 7 0 - 5
+ 0 12 - 13
+ 12 18 - 19
+ 19 17 - 20
+ 4
+ 5 4
+ 13 5
+ 18 13
+ 20 18
*/
std::unordered_map> directed_graph = {
- {1, {3, 7}},
- {3, {1, 8}}
+ {3, {1, 8}},
+ {8, {6}},
+ {6, {9, 0}},
+ {9, {11, 12}},
+ {11, {10}},
+ {10, {17}},
+ {1, {7}},
+ {7, {0, 5}},
+ {0, {12, 13}},
+ {12, {18, 19}},
+ {19, {17, 20}},
+ {5, {4}},
+ {13, {5}},
+ {18, {13}},
+ {20, {18}}
};
- CDirectedGraph di_graph(directed_graph);
-
+ CDirectedGraph di_graph(std::move(directed_graph));
+ di_graph.traverse_bfs();
}
diff --git a/algorithm/graph_algorithm.h b/algorithm/graph_algorithm.h
index 809307c..205de32 100755
--- a/algorithm/graph_algorithm.h
+++ b/algorithm/graph_algorithm.h
@@ -10,10 +10,69 @@
#define GRAPH_ALGORITHM_H
template
-class CGraph {
+class CBaseGraph {
public:
- CGraph(std::unordered_map>& adjacency_list) {
- m_adjacency_list = adjacency_list;
+ CBaseGraph(std::unordered_map>&& adjacency_list) {
+ m_adjacency_list = std::move(adjacency_list);
+ }
+
+ virtual void traverse_dfs(int starting_node = -1) {
+ std::unordered_set visited_nodes;
+
+ if(!m_adjacency_list.contains(starting_node)) {
+ return;
+ }
+
+ std::stack nodes_to_be_visited;
+ nodes_to_be_visited.push(starting_node);
+
+ visited_nodes.insert(starting_node);
+
+ std::cout< visited_nodes;
+
+ if(!m_adjacency_list.contains(starting_node)) {
+ return;
+ }
+
+ visited_nodes.insert(starting_node);
+
+ std::queue nodes_to_be_visited;
+ nodes_to_be_visited.push(starting_node);
+
+ std::cout<<"BFS: ";
+
+ while(!nodes_to_be_visited.empty()) {
+ for(const auto& adjacent_node: m_adjacency_list[nodes_to_be_visited.front()]) {
+ if(!visited_nodes.contains(adjacent_node)) {
+ visited_nodes.insert(adjacent_node);
+ nodes_to_be_visited.push(adjacent_node);
+ }
+ }
+
+ std::cout<
-class CDirectedGraph : CGraph {
+class CDirectedGraph : public CBaseGraph {
public:
- CDirectedGraph(std::unordered_map>& adjacency_list) :
- CGraph(adjacency_list) {
+ CDirectedGraph(std::unordered_map>&& adjacency_list) :
+ CBaseGraph(std::move(adjacency_list)) {
+ }
+
+protected:
+ void make_graph() override {
}
private:
};
+void create_undirected_graph();
void create_directed_graph();
#endif /* GRAPH_ALGORITHM_H */
diff --git a/algorithm/header.h b/algorithm/header.h
index 0686ab1..914eb23 100755
--- a/algorithm/header.h
+++ b/algorithm/header.h
@@ -46,6 +46,10 @@
#include
+#include
+
+#include
+
#include
#include
diff --git a/algorithm/main.cpp b/algorithm/main.cpp
index 4fb4913..cc7da25 100755
--- a/algorithm/main.cpp
+++ b/algorithm/main.cpp
@@ -20,7 +20,12 @@
int main(int argc, const char* argv[]) {
- create_directed_graph();
+ invoke_calculate_minimum_coins();
+
+// std::cout<<(-1%10)<& denoms, int coins_needed, std::unordered_map& computed_targets) {
+ if(target < 0) {
+ return INT_MAX;
+ }
+
+ if(computed_targets.contains(target) && computed_targets.at(target) <= coins_needed) {
+ std::cout<<"Using pre-computed data: "< value: "< computed_targets;
+ int minimum_coins = calculate_minimum_coins(11, {1, 2, 5}, 0, computed_targets);
+ std::cout<<"Min. coins needed: "< input_array);
void rat_in_a_maze_impl(const std::vector>& input, std::vector>& output, const std::vector& destination);
void rat_in_a_maze();
+void calculate_minimum_coins(int target, const std::vector& denoms, int coins_needed, int& min_coins, std::unordered_map& computed_targets);
+void invoke_calculate_minimum_coins();
+
#endif /* number_algorithm_hpp */