Seg 错误初始化列表向量与控制台输入

Seg fault initializing vector of lists with input from console

本文关键字:控制台 输入 向量 列表 错误 初始化 Seg      更新时间:2023-10-16

我一直在研究涉及树的问题的解决方案。我的策略是获取输入并将图形表示为邻接列表。不幸的是,我遇到了分段错误,无法弄清楚我在这里做错了什么。

int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */
    int N;
    cin >> N;
    int M; 
    cin >> M;
    // matrix of adjacency list to hold node values
    vector<list<int> > adjList(M, list<int>());
    // create adjacency list
    int ui, vi;
    while(true) {
      cin >> ui;
      cin >> vi;
      ui--;
      vi--;
      adjList[ui].push_front(vi);
      adjList[vi].push_back(ui);
    }
return 0;
}

当我运行程序并输入此输入时,它会停止运行并出现分段错误。

10 9
2 1
3 1
4 3
5 2
6 1
7 2
8 6
9 8
10 8

注意:第一行不是图形的一部分,它定义了图形的约束。所以这个总共有 10 个顶点和 9 条边。

你的向量有M=9个元素。这些元素的编号从 0 到 8,并且您的代码正在尝试访问索引 9 处的元素(最后一行中的 10 减 1)。