Create the following operations and include a menu-driven main program that will demonstrate your operations. The program will only stop when the user chooses 5 Exit Program. Create Graph a. Adjacency List b. Adjacency Matrix  Traversal (User will input the source / start) a. BFS  b. DFS  Find Path (Given source and destination)  Path Cost (Given source and destination) Exit Program

C++ for Engineers and Scientists
4th Edition
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Bronson, Gary J.
Chapter5: Repetition Statements
Section5.4: For Loops
Problem 7E: (Conversion) Write a C++ program to convert kilometers/hr to miles/hr. The program should produce a...
icon
Related questions
Question
Create the following operations and include a menu-driven main program that will demonstrate your operations. The program will only stop when the user chooses 5 Exit Program.
  1. Create Graph
    a. Adjacency List
    b. Adjacency Matrix 
  2. Traversal (User will input the source / start)
    a. BFS 
    b. DFS 
  3. Find Path (Given source and destination) 
  4. Path Cost (Given source and destination)
  5. Exit Program 
  6. Main Program 

======================
Main.cpp

#include <iostream>
#include "Data.h"
using namespace std;

int main()
{
    int ch;
    Graph g(8);
    cout << "Graph Operations" << endl;
    cout << "[1] Adjacency List" << endl;
    cout << "[2] Adjacency Matrix" << endl;
    cout << "Enter choice: ";
    cin >> ch;
    if (ch == 1)
    {
        //insert code
    }
    else if (ch == 2)
    {
        //insert code
    }
    cout << endl << endl;
}

======================

Data.h

#pragma once
#include <list>
#include <iostream>
using namespace std;


class Graph
{
private:
    int V;
    list <int> *adj;                                  
    int **adj2;                                           
    void DFSUtil(int v, bool visited[]);    
    void BFSUtil(int s, bool visited[]);     

 public:
    Graph(int);                                         
    void addEdge(int u, int v);                
    void addEdge2(int u, int v);            
    void printGraph();                           
    void printGraph2();                            
    void DFS(int v);                              
    void BFS(int s);                              
};

======================

Implementation.cpp

#include <iostream>
#include <list>
#include "Data.h"
using namespace std;

Graph::Graph(int x)
{
    V = x;
    adj = new list <int> [V];
    adj2 = new int* [V];
    for (int i = 0; i < V; i++)
            adj2[i] = new int[V];
    for (int i = 0; i < V; i++)
        for (int j = 0; j < V; j++)
            adj2[i][j] = 0;

}

void Graph::addEdge(int u, int v)
{
    adj[u].push_back(v);
}

void Graph::addEdge2(int u, int v)
{
    adj2[u][v] = 1;
}

// A utility function to print the adjacency list 
// representation of graph 
void Graph::printGraph()
{
    cout << "Adjacency List..." << endl;
    for (int v = 0; v < V; ++v)
    {
        cout << "V[" << v << "]";
        for (auto x : adj[v])
            cout << " -> " << x;
        cout << endl;
    }
}

void Graph::printGraph2()
{
    cout << "Adjacency Matrix..." << endl << endl;
    cout << "\t";
    for (int i = 0; i < V; i++)
        cout << "V[" << i << "]" << "\t";
    cout << endl;
    for (int i=0; i<V; i++)
    {
        cout << "V[" << i << "]" << "\t";
        for (int j = 0; j < V; j++)
            cout << adj2[i][j] << "\t";
        cout << endl;
    }
    cout << endl;
}

void Graph::DFSUtil(int v, bool visited[])
{
    // Mark the current node as visited and 
    // print it 
    visited[v] = true;
    cout << v << " ";

    // Recur for all the vertices adjacent 
    // to this vertex 
    list<int>::iterator i;
    for (i = adj[v].begin(); i != adj[v].end(); ++i)
        if (!visited[*i])
            DFSUtil(*i, visited);
}

// DFS traversal of the vertices reachable from v. 
// It uses recursive DFSUtil() 
void Graph::DFS(int v)
{
    // Mark all the vertices as not visited 
    bool *visited = new bool[V];
    for (int i = 0; i < V; i++)
        visited[i] = false;

    // Call the recursive helper function 
    // to print DFS traversal 
    
    DFSUtil(v, visited);
    for(int i=0; i< V; i++)
        if (!visited[i])
            DFSUtil(i, visited);

    for (int i = 0; i < V; i++)
        if (!visited[i])
            cout << i << " ";
}

void Graph::BFS(int s)
{
    // Mark all the vertices as not visited 
    bool *visited = new bool[V];
    for (int i = 0; i < V; i++)
        visited[i] = false;

    BFSUtil(s, visited);
    for (int i = 0; i < V; i++)
        if (!visited[i])
            BFSUtil(i, visited);

    for (int i = 0; i < V; i++)
        if (!visited[i])
            cout << i << " ";
}

void Graph::BFSUtil(int s, bool visited[])
{
    // Create a queue for BFS 
    list<int> queue;

    // Mark the current node as visited and enqueue it 
    visited[s] = true;
    queue.push_back(s);

    // 'i' will be used to get all adjacent 
    // vertices of a vertex 
    list<int>::iterator i;

    while (!queue.empty())
    {
        // Dequeue a vertex from queue and print it 
        s = queue.front();
        cout << s << " ";
        queue.pop_front();

        // Get all adjacent vertices of the dequeued 
        // vertex s. If a adjacent has not been visited,  
        // then mark it visited and enqueue it 
        for (i = adj[s].begin(); i != adj[s].end(); ++i)
        {
            if (!visited[*i])
            {
                visited[*i] = true;
                queue.push_back(*i);
            }
        }
    }
}

 
Expert Solution
trending now

Trending now

This is a popular solution!

steps

Step by step

Solved in 2 steps

Blurred answer
Knowledge Booster
Lists
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
C++ for Engineers and Scientists
C++ for Engineers and Scientists
Computer Science
ISBN:
9781133187844
Author:
Bronson, Gary J.
Publisher:
Course Technology Ptr