ファイルから値を呼び出すグラフの隣接リスト表現を実装しようとしています。最初の2つの数値は、それぞれ頂点の数とエッジの数です。次の行には、エッジの端点が含まれています。
例えば:
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);」で例外がスローされます。
ベクトルにサイズエラーがあると思いますが、どこでどのように修正するのかわかりません。
これはコメントですが、adjListのサイズをN(今のところ5など)に変更すると、adjList [0]からadjList [4]までの5つのベクトルが含まれます。エッジ52がある場合、コードは挿入を試みます。存在しないadjList [5]に入れます。
だから変更してみてください
adjList[edge.src].push_back(edge.dest)
に
adjList[edge.src-1].push_back(edge.dest)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加