Learning Goal: I’m working on a c++ multi-part question and need an explanation

Learning Goal: I’m working on a c++ multi-part question and need an explanation and answer to help me learn.In C++, need help with the following. I have my rough skeleton of code for reference. Cannot change Main.cpp – please don’t change it. Otherwise, please feel free to change or alter my current code. The graph class should have the following data elements:Head A pointer to the first node in the linked list of nodes
Current A pointer to the current node
N Number of nodes in graph
The graph class should have the following functions:Constructor Initialize the empty graph
Destructor Delete the node list
Insert
Insert an edge into the graph. Takes three parameters, a value for the
source node, a value for the target node, and the weight of the edge.
If either of the values do not exist, add them to the node list.
Show Display the the current node
Depth Display the values of a depth-first search. Takes one parameter, the output stream.
Breadth Display the values of a breadth-first search. Takes one parameter, the output stream.
Move Move the Current pointer to the matching node in the list. Takes one parameter, a string.
Put
Output the value, and the values and distances to its immediate
neighbors. Takes one parameter, the output stream.
Connect
Create a new edge and attach it to the end of the edge list. Takes two
parameters, a pointer to the target node, and the distance.
Breadth Add this node’s neighbors to a breadth-first list of nodes. This does not need to be recursive.
The node class should have the following data elements:Value Stored value (a string)
Visit Boolean indicator shows if node has been visited
Edges A pointer to the first edge node in the linked list of edges
Next A pointer to the next node in the linked list of nodes
The node class should have the following functions:Constructor Create an empty node
Destructor Delete the edge list
Depth Recursive depth-first search.
The edge class should have the following data elements:Target A pointer to the target node
Weight Distance to the target node
Next The next edge in the list
The edge class should have the following functions:Constructor Create an edge with a pointer to a node and the distance
Destructor Delete any following edges
All
data elements should be private. It will help to declare the graph
class a friend to the node class. Your class should also contain
functions to move around the graph, search depth-first, and
breadth-first. Edge.h#ifndef EDGE_H#define EDGE_Hclass node;class edge{ friend class node; ///declare node as a friend of the class edgepublic: edge(node* argt, int argw); // Constructor for edges – needs both target and weight ~edge(); //destructor for edgesprivate: int weight; // Weight – distance to the target node node* target; // Pointer to the target node node* next; //to the next edge in the list };#endifEdge.cpp#include #include #include using namespace std;#include “Edge.h”/*************************************** Constructor**************************************/edge::edge(node* argt, int argw){target = argt;weight = argw;next = NULL;}Graph.h#ifndef GRAPH_H#define GRAPH_H#include “Edge.h”//#define NODE_MAX 8class graph{public: graph(); // Constructor ~graph(); // Destructor bool graph::insert(string arg_source, string arg_target, int argw); // Insert edge into graph //bool link(string args, string argt, float argw); // Add link void show(ostream& out); //show the current node void move(string val); // moves the current pointer to the matching node in list void depth(ostream&); //Displays the values of a depth first search void breadth(ostream&); // Displays the values of a breadth searchprivate: node* head; // pointer to the first node in linked list of nodes node* current; //pointer to the current node int N; //number of nodes in the graph};#endifGraph.cpp#include #include #include using namespace std;#include “Graph.h”#include “Node.h”/******************************* Null constructor******************************/graph::graph(){//constructor for graph – starts off emptyhead = NULL;current = NULL;N = 0;}/******************************* Null deconstrutctor******************************/graph::~graph(){//null destructor for graph//counter integerif (head != NULL){ delete head;}}/************************************** * insert() **************************************/bool graph::insert(string arg_source, string arg_target, int argw){//insert edge into graph//value for source node, value for target, and weight of edge//temporary pointernode* p = head;//check if p is not null firstwhile (p != NULL && p.){}}/*************************************** show()**************************************/void graph::show(ostream& out){//insert edge into graph//value for source node, value for target, and weight of edge using put functioncurrent->put(out);}/*************************************** move()**************************************/void graph::move(string val){//insert edge into graph//value for source node, value for target, and weight of edge}/*************************************** depth()**************************************/void graph::depth(ostream& out) {node* p = head;while (p != NULL){ p->visit = false;}//move to the start node with move function//return back to head//call depth on starting node in the list//// If visited == true, return – we have visited each and every node//if (visit == true)//{// return;//}//// Set visited = true once all nodes have been visited//visit = true;//// Output this node’s contents. //cout << get_value() <depth().//int i = 0; //counter variable//while ((i depth(cout);// i++;//}}/*************************************** breadth()**************************************/void graph::breadth(ostream& out){//loop through each node in map//set map visited to false//set visited to false – temporary pointer qnode* q = head;while (q!= NULL){ q->visit = false;}//move back to start node(head) using move function//add edge[START] to the display list//set edge[START].visited to false//loop through each item – call show to output display//by calling display[i].breadth()}Node.h // Node Declarations#ifndef NODE_H#define NODE_H//include the edge class#include “Graph.h”//#include “Edge.h”#define ERR -1//#define NODE_MAX 20#define EDGE_MAX 20// Node classclass node{ friend class graph; //friend class edge;public: node(); //null constructor ~node(); // public ~node() deconstructor void set_value(string); // Set string value string get_value(); // Return string value void connect(node*); // Create a new edge and attach it to the end of the edge list //- takes pointer node and distance void put(ostream&); // Outputs the value and values/distances to immediate neighbors void depth(ostream&); // Depth-first search- recusrive void breadth(ostream&); // Add current node’s neighbors to a breadth first list of nodesprivate: string value; // Node value node* edge[EDGE_MAX]; // pointer to the first edge node in linked list of edges node* next; // pointer to the next node in the linked list of nodes bool visit; //boolean indicator – shows if node has been visited};typedef node* node_ptr;#endifNode.cpp#include #include #include using namespace std;#include “Node.h”/******************************* Null constructor******************************/node::node(){int i;value = “”;for (i = 0; i < N; i++){ edge[i] = NULL;}visit = false;next = NULL;}/******************************* Null destructor******************************/node::~node(){// if the node list is present, delete and clean up at endif (next != NULL){ delete next;}}/******************************* set_value()******************************/void node::set_value(string arg){value = arg;}/******************************* get_value()******************************/string node::get_value(){return value;}/******************************* connect()******************************/void node::connect(node* otherNodes)//function to connect one node to another{//number of edges, existing index, and existing nodeint numberOfEdges, existingIndex, existingNode;numberOfEdges = 0;existingIndex = 0;existingNode = 0;//counter variableint i = 0;cout << "Now connecting " <get_value() << " to " << get_value() << endl;//search for the position which is empty in edge array of the node – search all elements of array edgebool found;found = false;//search through all while the edge is not nullwhile (edge[i] != NULL){ if (edge[i] == otherNodes) { //if existing node is found, set index to i found = true; existingIndex = i; } //incrmeent by i i++;}//set number of edges equal to inumberOfEdges = i;if (!found){ //if not found, the number of edges will be equal to the edges shared by the other node edge[numberOfEdges] = otherNodes;}else{ //if found, set the value of the edge for that index in array //equal to the value of the edge for that index in the existing index edge[numberOfEdges] = edge[existingIndex];}}/******************************* put()******************************/void node::put(ostream&)//output function-displays the node's value followed by values of node's immediate neighbors{//counter integerint i = 0;//print statementcout << get_value() << endl;//need to put in while loop to print all edges of the node until NULLwhile (edge[i] != NULL){ cout << "—" <get_value() << endl; i++;}}/******************************* depth()******************************/void node::depth(ostream&)//function to print the traversal depth of a graph as we visit from node to node//with connecting edges{// If visited == true, return – we have visited each and every nodeif (visit == true){ return;}// Set visited = true once all nodes have been visitedvisit = true;// Output this node's contents. cout << get_value() <depth().int i = 0; //counter variablewhile ((i depth(cout); i++;}}/******************************* breadth()******************************/void node::breadth(ostream&)//function to print the traversal depth of a graph as we visit from node to node//with connecting edges{//loop through each edge first//counter variable iint i = 0;while ((i breadth(cout); //increment by one i++; //set the current target visted to true visit = true; }}//// If visited == true, return – we have visited each and every node//if (visit != true)//{// //add trget to display list//}//// Set visited = true once all nodes have been visited//visit = true;//// Output this node’s contents. //cout << get_value() <depth().//int i = 0; //counter variable//while ((i breadth(cout);// i++;//}}Main.cpp:#include #include #include using namespace std;#include “Graph.h”/***************************** main()****************************/void main(){ int dist; string fname,s,t; char method; fstream in; graph g;// Open file cout <> fname;//fname = “Program07a.txt”; in.open(fname.data(),ios::in);// Load file while(!in.eof()) { in >> s >> t >> dist; if(in.good()) g.insert(s,t,dist); };// Close file in.close();// Loop to display graph method = 0; while(method!=’Q’) {// Display cout << endl; g.show(cout);// Menu cout <> s; method = toupper(s[0]); cout << endl;// Move if(method=='M') { cout <> s; g.move(s); };// Searches if(method==’D’) g.depth(cout); if(method==’B’) g.breadth(cout); };// Done cout << "Thank you!" << endl;} Sample Text:A B 10A D 5A E 10D C 4D F 4C B 8C F 3F C 2F E 8 Sample Output:Enter file name: Program07a.txtNode AEdge B 10Edge D 5Edge E 10M)ove, D)epth, B)readth, P)ath, Q)uit: DDepth List—————-A B D C F ENode AEdge B 10Edge D 5Edge E 10 M)ove, D)epth, B)readth, P)ath, Q)uit: MEnter node: CNode CEdge B 8Edge F 3M)ove, D)epth, B)readth, P)ath, Q)uit: BBreadth List—————-C B F ENode CEdge B 8Edge F 3M)ove, D)epth, B)readth, P)ath, Q)uit: QThank you!
Requirements: As long as need be

CategoriesC#

Leave a Reply

Your email address will not be published.