Мне нужно реализовать орграф в 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;
}