Как реализовать ориентированный граф строк, представляющих имена пересечений - PullRequest
0 голосов
/ 14 апреля 2020

Мне нужно реализовать орграф в C ++, с узлами, представляющими пересечения, и направленными ребрами, представляющими дороги. У меня уже код работает, но узлы имеют целочисленные значения. Я хочу, чтобы у них были строковые значения, представляющие имя пересечения. У меня это работает для целых значений, но не для строковых значений.

#include <string>
#include <iostream>
using namespace std;

struct node {
    int intersect_num; // I want to change this to 'string intersect_name;'
    node* nxt;
};


struct directed_edge {
    int src, dest;
};

class Graph {
    // Function to allocate new node of Adjacency List
    node* getAdjListNode(int dest, node* head) {
        node* newNode = new node;
        newNode->intersect_num = dest;

        // point new node to current head
        newNode->nxt = head;

        return newNode;
    }

    int N;  // number of nodes in the graph

public:
    // an array of pointers to Node to represent adjacency list
    node** head;

    // constructor
    Graph(directed_edge edges[], int num_edges, int num_nodes) {
        // allocate memory
        head = new node*[num_nodes]();
        this->N = num_nodes;

        // initialize head pointer for all vertices
        for (int i = 0; i < num_nodes; i++)
            head[i] = nullptr;

        // add edges to the directed graph
        for (unsigned  i = 0; i < num_edges; i++) {
            int src = edges[i].src;
            int dest = edges[i].dest;

            // insert in the beginning
            node* newNode = getAdjListNode(dest, head[src]);

            // point head pointer to new node
            head[src] = newNode;
        }
    }

    ~Graph() {
        for (int i = 0; i < N; i++)
            delete[] head[i];

        delete[] head;
    }
};

// print all neighboring nodes of a node
void printList(node* ptr) {
    while (ptr != nullptr) {
        cout << " -> " << ptr->intersect_num<< " ";
        ptr = ptr->nxt;
    }
    cout << endl;
}

int main() {
    // array of graph edges as per above diagram.
    directed_edge edges[] =
        {
            // pair (x, y) represents edge from x to y
            { 0, 1 },{ 1, 2 },{ 2, 0  },{2, 1 },
            { 3, 2 },{ 4, 5 },{ 5, 4 }
        };

        int num_nodes = 6;
        int num_edges = sizeof(edges) / sizeof(edges[0]);

        Graph graph(edges, num_edges, num_nodes);

        // print adjacency list representation of graph
        for (int i = 0; i < num_nodes; i++) {
            // print given vertex
            cout << i << " --";

        // print all its neighboring vertices
        printList(graph.head[i]);
    }

    return 0;
}

Terminal output with no replacement Terminal output if replaced with string

...