##. I have done some part of this program I just need to work on the remaining functions such as dislayDFS, displayBSF, and bool isBipartite. You should not use additional functions and everything need to be iterative NO RECURSIVE
Write a C++ class definition for an abstract data type called Graph that models an undirected graph. Vertices are labeled by number from 0 to n-1 where n is the number of vertices in the graph. Implement the following public member functions. • Graph(char *fileName): A constructor that creates the graph using the file passed into the function. o The format of the file is described later in the document. • ~Graph(): An appropriate destructor. • void display() const: Displays the graph’s adjacency matrix to the screen using this format (see examples later): o Single space between digits. o First row (top) and first column (left) is vertex 0, second row and column is vertex 1, …, last row (bottom) and last column (right) is vertex n – 1. • void displayDFS(int vertex) const: Displays the result of a depth first search starting at the provided vertex. o When you have a choice between selecting two vertices, pick the vertex with the lower number. • void displayBFS(int vertex) const: Displays the result of a breadth first search starting at the provided vertex. o When you have a choice between selecting two vertices, pick the vertex with the lower number. • bool isBipartite() const: Returns true if the graph is bipartite and false otherwise.
##. I have done some part of this program I just need to work on the remaining functions such as dislayDFS, displayBSF, and bool isBipartite. You should not use additional functions and everything nee
// FILE: StackInt.cpp// DESCRIPTION: Class implementation for a stack of integers// NOTE: You are not allowed to modify this file.#include #include using namespace std;#include “StackInt.h”// Add an integer to the top of the stack.void StackInt::push(int val){stackObj.push(val);}// Removes and returns an integer from the top of the stack. Aborts the// program is the stack is empty.int StackInt::pop(){int val = top();stackObj.pop(); return val;}// Returns but does not remove the integer at the top of the stack. Aborts the// program is the stack is empty.int StackInt::top() const{if (isEmpty()) { cerr << “Tried to access empty stack –> aborting program” << endl;exit(-1);}return stackObj.top();}// Returns true if the stack is empty.bool StackInt::isEmpty() const{return stackObj.empty();} // FILE: QueueInt.cpp// DESCRIPTION: Class implementation for a queue of integers// NOTE: You are not allowed to modify this file.#include #include using namespace std;#include “QueueInt.h”// Add an integer to the back of the queue.void QueueInt::enqueue(int val){ queueObj.push(val);}// Removes and returns an integer from the front of the queue. Aborts the// program is the queue is empty.int QueueInt::dequeue(){int val = front();queueObj.pop(); return val;}// Returns but does not remove the integer at the front of the queue. Aborts the// program is the queue is empty.int QueueInt::front() const{if (isEmpty()) { cerr << “Tried to access empty queue –> aborting program” << endl;exit(-1);}return queueObj.front();}// Returns true if the queue is empty.bool QueueInt::isEmpty() const{return queueObj.empty();} / FILE: main.cpp// DESCRIPTION: Tests Graph class// NOTE: You are not allowed to modify this file.#include using namespace std;#include “Graph.h”int main(int argc, char *argv[]){ argv[1] = “graph0.txt”;Graph g(argv[1]);cout << endl << “Adjacency Matrix” << endl;g.display();g.displayDFS(0);g.displayBFS(0);cout << “Bipartite: “; if (g.isBipartite()) cout << “TRUE”; elsecout << “FALSE”;cout << endl; return 0;} // FILE: Graph.cpp// DESCRIPTION: Implementation of the Graph class.#include #include #include #include using namespace std;#include “Graph.h”#include “QueueInt.h”#include “StackInt.h”// Constructor: load the graph from a fileGraph::Graph(char *filename){ifstream myfile;myfile.open (filename); // open file named filenameif ( myfile.is_open() ) { // check if the file is opencout<<“n”<<filename<<“:”<<endl; // prints out the name of the filestring line;getline(myfile, line); // store and get the next linen = stoi(line); // convert the into int to access the vertix numadjMatrix = new int*[n]; // matrix initializedfor(int i = 0; i < n; i++){adjMatrix[i] = new int[n]; for(int j = 0; j < n; j++){adjMatrix[i][j] = 0; // make element in the metrix equal to zero} }while (getline(myfile, line)) { // keep storing and going to the next lineint a = stoi(line.substr(0, 1)); int b = stoi(line.substr(2,1));adjMatrix[b][a] = 1;adjMatrix[a][b] = 1;} }else { cout << “Couldn’t open filen”;}}// DestructorGraph::~Graph(){if(!adjMatrix) { // if adjmatrix is not nullptrfor(int i = 0; i < n; i++ ){delete [] adjMatrix[i]; // delete the adjMatrix from i through n}delete [] adjMatrix;}}// Display the adjacency matrixvoid Graph::display() const{//using nested for loop to display columns and row of the matrixfor(int i = 0; i < n; i++) {for(int j = 0; j < n; j++) { cout<< adjMatrix[j][i] <<” “;} cout<<endl;}}// Displays the depth first search starting at the given vertexvoid Graph::displayDFS(int vertex) const {}// Perform breadth first search starting at the given vertexvoid Graph::displayBFS(int vertex) const{ Graph.csv 50 11 22 43 24 01 3