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

Это мой третий раз для создания графа с использованием списка смежности в c ++. Важно использовать ООП. Я чувствую, что ответ на эту проблему очень прост, но мне не удается исправить и улучшить мой код.

Есть это:

#include <iostream>
#include <algorithm>
#include <fstream> 
#include <vector>


using namespace std;
struct Edge
{
    int begin;
    int end;
};

class Graph
{
private:
    int numOfNodes;
    vector<vector<int>> baseVec;

public:
    Graph(int numOfNodes)
    {   

        //baseVec->resize(numOfNodes, vector<int>(numOfNodes));
        for (int i = 0; i < numOfNodes; i++)
        {
            vector<Edge> subVec;
            baseVec.emplace_back(subVec);
        }
    }

    void newEdge(Edge edge)
    {
        if (edge.begin >= numOfNodes && edge.end >= numOfNodes)
        {
            cout << "Invalid edge!\n";
        }
        baseVec[edge.begin].emplace_back(edge.end);
        baseVec[edge.end].emplace_back(edge.begin);
    }
    void display()
    {
        cout << baseVec.size();
        for (int i = 0; i < baseVec.size(); i++)
        {
            cout << "\n Adjacency list of vertex " << i << "\n head ";
            for (int j = 0; j < baseVec[i].size(); j++)
            {
                cout << baseVec[i][j];
                cout << endl;
            }
        }
    }

};

int main()
{
    int vertex, numberOfEdges, begin, end;
    cout << "Enter number of nodes: ";
    cin >> vertex;
    numberOfEdges = vertex * (vertex - 1);

    Edge edge;
    Graph g1(vertex);
    for (int i = 0; i < numberOfEdges; i++)
    {
        cout << "Enter edge ex.1 2 (-1 -1 to exit): \n";
        cin >> edge.begin >> edge.end;
        if ((begin == -1) && (end == -1))
        {
            break;
        }
        g1.newEdge(edge);
    }
    g1.display();
    return 0;
}

Так что теперь в Visual Studio у меня есть ошибка:

'std :: vector> :: vector (const std :: vector <_Ty, std :: allocator <_Ty >> &)': невозможно преобразовать аргумент 1 из 'std :: vector>' в 'const _Alloc & «

Также, что в методе display () имеется несоответствие со знаком или без знака. Я не знаю, если что-то не так с моими методами, но я застрял здесь.

1 Ответ

0 голосов
/ 15 ноября 2018
vector<vector<int>> baseVec;

принимает vector<int> с

vector<Edge> subVec;
baseVec.emplace_back(subVec);

Пытается подать vector<Edge> с.Это не имеет смысла.

vector<vector<Edge>> baseVec;

Имеет смысл.

Обратите внимание, что это изменение создаст еще один всплеск ошибок, когда

cout << baseVec[i][j];

попытается напечататьedge и не знает как.Либо создайте перегрузку operator<< для обработки edge, либо измените то, что вы выводите.

...