0

Can anybody explain me, how to do Breadth first search in the graph that uses vector of linked lists ?

My Graph header file:

#include <string>
#include <iostream>
#include <map>
#include <vector>
using namespace std;
struct vertex {
    string code;
    vertex* next;
};
struct AdjList {
    vertex *head;
    AdjList(vertex* Given) {
        head = Given;
    }
};
class Graph {
    map<string, string> associations;
    int nodeNum; //amount of nodes or size of the graph;
    vector<AdjList> adjList;
public:
    Graph(int NodeNum);
    ~Graph();
    int singleSize(string codeName);
    int getSize();// must destroy every prerequisite list connected to the node
    vertex* generateVertex(string codeName);
    int getIndexOfVertex(vertex* givenVertex); // will find the location of the vertex in the array
    void addVertex(vertex* newVertex);
    void addEdge(string codeName, string linkCodeName);
    void printPrerequisites(vertex* ptr, int i);
    bool deleteVertex(string codeName);
    bool deleteEdge(string codeName, string linkCodeName);
    bool elemExistsInGraph(string codeName);
    void printPrereq(string codeName);
    void printCourseTitle(string codeName);
    void printGraph();
};

I am trying to print all connected nodes within the graph using the breadth first search. Here is my code for the breadth first search algorithm that does not work.

void Graph::printPrereq(string codeName) {
    int adjListSize = this->adjList.size();
    int index = getIndexOfVertex(generateVertex(codeName));
    bool visited[this->adjList.size()];
    for(int i = 0; i < adjListSize; i++) {
        visited[i] = false;
    }
    list<int> queue;
    visited[index] = true;
    queue.push_back(index);
    while(!queue.empty()) {
        index = queue.front();
        vertex* pointer = this->adjList[index].head;
        cout << pointer->code;
        queue.pop_front();
         while(pointer != nullptr){
             if(!visited[getIndexOfVertex(pointer)]) {
                queue.push_back(getIndexOfVertex(pointer));
                visited[getIndexOfVertex(pointer)] = true;
             }
            cout << pointer->code <<"->";
            pointer = pointer->next;
        }
        cout << "Null" << endl;
    }
}

This algorithm outputs nodes that are only within the linked list, but not the ones that are connected through the graph.

Can anybody help and solve this problem?

  • `bool visited[this->adjList.size()];` -- This is not valid C++. You're already using `std::vector`, so it should be used here: `std::vector visited(adjList.size());` -- *Can anybody help and solve this problem?* -- Use the debugger that comes with the compiler you're using. – PaulMcKenzie Jun 06 '20 at 04:24
  • 1
    Your code doesn't compile ... please post a minimal running example ... – OrenIshShalom Jun 06 '20 at 04:40
  • `list queue;` -- There is a `std::queue` in C++. Why the need for `std::list`? – PaulMcKenzie Jun 06 '20 at 05:23

0 Answers0