Попытка сделать список смежности для графа - PullRequest
0 голосов
/ 17 февраля 2020

Итак, все еще пытаюсь реализовать список смежности для графа. Я должен сделать это так: вы пишете количество вершин, а затем для каждой из них вы пишете связанные с ними вершины. Например:

"Write amount of vertices:" 5
1: 2 3 
2: 4 5
3: 1 4 
4: 5
5: 1 3 

А затем этот список сохраняется и может отображаться или преобразовываться в матрицу смежности или матрицу инцидентности.

#include <iostream>
using namespace std;

class list{
public:

    list() {
        Size = 0;
        head = nullptr;
    }
    void zanos(int data);
    int getSize() { return Size; }
    int& operator[](const int index);

private:

    class Node {
    public:
        Node* next;
        int data;
        Node(int data = 0, Node* next = nullptr) {
            this->data = data;
            this->next = next;
        }
    };
    int Size;
    Node *head;
};

int main() {
    list st1;
    st1.zanos(5);
    st1.zanos(6);
    st1.zanos(10);
    cout << st1.getSize() << endl;
    cout << st1[1];
}

void list::zanos(int data)
{
    if (head == nullptr) {
        head = new Node;
    }
    else {
        Node* current = this->head;
        while (current->next != nullptr)
            current = current->next;
    }
    Size++;
}

int& list::operator[](const int index)
{
    int counter = 0;
    Node* current1 = this->head;
    while (current1 != nullptr) {
        if (counter == index) {
            return current1->data;
        }
        current1 = current1->next;
        counter++;
    }
} 

прямо сейчас получил такой код, где я пытаюсь составить список смежности через односвязный список, который я пытаюсь сделать (потому что это Dynami c, и я не знаю другого способа, как ввести неизвестное количество вершин, которые будут сохранены и могут быть доступны с помощью индекса. для индекса я пытаюсь перегрузить operator [], но получаю ошибку: Возникло исключение: нарушение прав чтения. ** list :: operator [] ** (...) вернул 0x1.

...