Please help me debug this code, expected output is attached below.

Database System Concepts
7th Edition
ISBN:9780078022159
Author:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Chapter1: Introduction
Section: Chapter Questions
Problem 1PE
icon
Related questions
Question

 Implementing Depth First Search

 
Please help me debug this code, expected output is attached below.
 

#include <string>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <stack>
template <typename T>
class Graph;

template <typename T>
struct Edge
{
 size_t src;
 size_t dest;
 T weight;
 // To compare edges, only compare their weights,
 // and not the source/destination vertices
 inline bool operator<(const Edge<T> &e) const
 {
 return this->weight < e.weight;
 }
 inline bool operator>(const Edge<T> &e) const
 {
 return this->weight > e.weight;
 }
};

template <typename T>
std::ostream &operator<<(std::ostream &os, const Graph<T> &G)
{
 for (auto i = 1; i < G.vertices(); i++)
 {
 os << i << ":\t";
 auto edges = G.outgoing_edges(i);
 for (auto &e : edges)
 os << "{" << e.dest << ": " << e.weight << "}, ";
 os << std::endl;
 }
 return os;
}


template <typename T>
class Graph
{
public:
 // Initialize the graph with N vertices
 Graph(size_t N) : V(N)
 {
 }
 // Return number of vertices in the graph
 auto vertices() const
 {
 return V;
 }
 // Return all edges in the graph
 auto &edges() const
 {
     
     return edge_list;
 }
 void add_edge(Edge<T> &&e)
 {
 // Check if the source and destination vertices are within range
 if (e.src >= 1 && e.src <= V &&
 e.dest >= 1 && e.dest <= V)
 edge_list.emplace_back(e);
 else
 std::cerr << "Vertex out of bounds" << std::endl;
 }
 // Returns all outgoing edges from vertex v
 auto outgoing_edges(size_t v) const
 {
 std::vector<Edge<T>> edges_from_v;
 for (auto &e : edge_list)
 {
 if (e.src == v)
 edges_from_v.emplace_back(e);
 }
 return edges_from_v;
 }
 // Overloads the << operator so a graph be written directly to a stream
 // Can be used as std::cout << obj << std::endl;
 template <typename T>
 friend std::ostream &operator<<<>(std::ostream &os, const Graph<T> &G);
private:
 size_t V; // Stores number of vertices in graph
 std::vector<Edge<T>> edge_list;
};

template <typename T>
auto depth_first_search(const Graph<T> &G, size_t dest)
{
 std::stack<size_t> stack;
 std::vector<size_t> visit_order;
 std::set<size_t> visited;
 stack.push(1); // Assume that DFS always starts from vertex ID 1
 while (!stack.empty())
 {
 auto current_vertex = stack.top();
 stack.pop();
 // If the current vertex hasn't been visited in the past
 if (visited.find(current_vertex) == visited.end())
 {
 visited.insert(current_vertex);
 visit_order.push_back(current_vertex);
 for (auto e : G.outgoing_edges(current_vertex))
 {
 // If the vertex hasn't been visited, insert it in the
 stack.if (visited.find(e.dest) == visited.end())
 {
 stack.push(e.dest);
 }
 }
 }
 }
return visit_order;
}

template <typename T>
auto create_reference_graph()
{
 Graph<T> G(9);
 std::map<unsigned, std::vector<std::pair<size_t, T>>> edges;
 edges[1] = {{2, 0}, {5, 0}};
 edges[2] = {{1, 0}, {5, 0}, {4, 0}};
 edges[3] = {{4, 0}, {7, 0}};
 edges[4] = {{2, 0}, {3, 0}, {5, 0}, {6, 0}, {8, 0}};
 edges[5] = {{1, 0}, {2, 0}, {4, 0}, {8, 0}};
 edges[6] = {{4, 0}, {7, 0}, {8, 0}};
 edges[7] = {{3, 0}, {6, 0}};
 edges[8] = {{4, 0}, {5, 0}, {6, 0}};
 for (auto &i : edges)
 for (auto &j : i.second)
 G.add_edge(Edge<T>{i.first, j.first, j.second});
 return G;
}

template <typename T>
void test_DFS()
{
 // Create an instance of and print the graph
 auto G = create_reference_graph<unsigned>();
 std::cout << G << std::endl;
 // Run DFS starting from vertex ID 1 and print the order
 // in which vertices are visited.
 std::cout << "DFS Order of vertices: " << std::endl;
 auto dfs_visit_order = depth_first_search(G, 1);
 for (auto v : dfs_visit_order)
 std::cout << v << std::endl;
}
int main()
{
 using T = unsigned;
 test_DFS<T>();
 return 0;
}

A Microsoft Visual Studio Debug Console
{2: 0}, {5: ®},
(1: ej, (5: ej, {4: 0},
{4: 0}, {7: e},
{2: 0}, {3: 0}, {5: 0}, {6: e}, {8: 0},
{1: 0}, {2: e}, {4: 0}, {8: 0},
{4: e}, {7: e}, {8: e},
{3: 0}, {6: 0},
{4: 0}, {5: 0}, {6: 0},
6:
7:
8:
DFS Order of vertices:
1
5
%3A2
Transcribed Image Text:A Microsoft Visual Studio Debug Console {2: 0}, {5: ®}, (1: ej, (5: ej, {4: 0}, {4: 0}, {7: e}, {2: 0}, {3: 0}, {5: 0}, {6: e}, {8: 0}, {1: 0}, {2: e}, {4: 0}, {8: 0}, {4: e}, {7: e}, {8: e}, {3: 0}, {6: 0}, {4: 0}, {5: 0}, {6: 0}, 6: 7: 8: DFS Order of vertices: 1 5 %3A2
Expert Solution
steps

Step by step

Solved in 2 steps with 2 images

Blurred answer
Knowledge Booster
Function Arguments
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
  • SEE MORE QUESTIONS
Recommended textbooks for you
Database System Concepts
Database System Concepts
Computer Science
ISBN:
9780078022159
Author:
Abraham Silberschatz Professor, Henry F. Korth, S. Sudarshan
Publisher:
McGraw-Hill Education
Starting Out with Python (4th Edition)
Starting Out with Python (4th Edition)
Computer Science
ISBN:
9780134444321
Author:
Tony Gaddis
Publisher:
PEARSON
Digital Fundamentals (11th Edition)
Digital Fundamentals (11th Edition)
Computer Science
ISBN:
9780132737968
Author:
Thomas L. Floyd
Publisher:
PEARSON
C How to Program (8th Edition)
C How to Program (8th Edition)
Computer Science
ISBN:
9780133976892
Author:
Paul J. Deitel, Harvey Deitel
Publisher:
PEARSON
Database Systems: Design, Implementation, & Manag…
Database Systems: Design, Implementation, & Manag…
Computer Science
ISBN:
9781337627900
Author:
Carlos Coronel, Steven Morris
Publisher:
Cengage Learning
Programmable Logic Controllers
Programmable Logic Controllers
Computer Science
ISBN:
9780073373843
Author:
Frank D. Petruzella
Publisher:
McGraw-Hill Education