Обход вектора списка - PullRequest
       69

Обход вектора списка

1 голос
/ 05 августа 2020
/* struct represents edges for a directed graph */
struct Edge {
public:
    Edge(int aTo = 0, int aCost = 0) {
        to = aTo;
        cost = aCost;
    }
    int to;
    int cost;
};

/* Graph object is used store graph using adjacency list 
method and implements Dijkstra's Algorithm to produce 
the shortest path from vertex s to all other vertices */

class Graph {
public:
    vector<int> Dijkstra(int src) const {
        // My method (stated below) goes here
    }

private:
    ...
    vector<list<Edge> > adjacencyList;
}

Тогда мой вопрос: как пройти по списку ребер, чтобы вставить их в кучу?

Например (Примечание: (#) представляет индекс векторного массива), допустим, мы имеют 3 вершины и представление списка смежности следующее:

(0) 0 --> 1 --> 2 --> null
(1) 1 --> 2 --> null
(2) 2 --> null

Я хочу, чтобы первая вершина, вершина 0, и хочу получить доступ к вершинам 1 и 2, чтобы получить стоимость, чтобы добраться до каждой, чтобы поставить другую структура данных (т.е. куча).

Мой подход был следующим:

for (auto it = adjacencyList.at(0).begin(); it != 
     adjancencyList.at(0).end(); it++) {
    // use it pointer to access each vertex's cost
}

это приводит к ошибке:

Value of type 'std::__1::__list_const_iterator<Edge, void *>' 
is not contextually convertible to 'bool'

Сообщите мне, если необходимы дополнительные разъяснения.

...