Как исправить «Ошибка отладки утверждения» «векторный индекс вне диапазона» в Списке смежности - PullRequest
0 голосов
/ 17 апреля 2019

Я пытаюсь реализовать представление списка смежности для графа, который вызывает значения из файла, первые два числа - это число вершин и количество ребер соответственно.Следующие строки содержат конечные точки ребер.

Например:

5 6

1 2

2 3

3 1

2 4

4 5

5 2

struct Edge {
    int src, dest;
};

class Graph
{
public:
    vector<vector<int>> adjList;
    Graph(vector<Edge> const &edges, int N)
    {
        adjList.resize(N);
        for (auto &edge : edges)
        {
            adjList[edge.src].push_back(edge.dest);
            //adjList[edge.dest].push_back(edge.src);
        }
    }
};
int main(int argc, char **argv)
{
    int vertices;
    int num_edges;
    vector<Edge> edges;
    //string filename(argv[1]);
    string filename("graph5.data");

    ifstream readin;
    readin.open(filename);
    readin >> vertices >> num_edges;
    for (int i = 0; i < num_edges; i++) {
        int a, b;
        readin >> a >> b;
        edges.push_back({ a,b });
    }
    readin.close();

    Graph graph(edges, vertices);
    printGraph(graph, vertices);


    return 0;

}

Я получаю сообщение об ошибке в виде

"Ошибка отладочного подтверждения!

Программа: C .....

Выражение: векторный индекс находится вне диапазона "

, и в" adjList [edge.src] .push_back (edge.dest "выдается исключение).); ".

Я считаю, что в моих векторах есть ошибка определения размера, но я не уверен, где и как ее исправить.

1 Ответ

0 голосов
/ 17 апреля 2019

Это скорее комментарий, но когда вы изменяете размер adjList к N (скажем, на данный момент 5), он содержит 5 векторов от adjList [0] до adjList [4]. Теперь, когда у вас есть ребро 5 2, ваш кодпытается вставить его в adjList [5], который не существует.

Поэтому попробуйте изменить

adjList[edge.src].push_back(edge.dest)

на

adjList[edge.src-1].push_back(edge.dest)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...