使用来自控制台的输入来分割列表的故障初始化向量
Seg fault initializing vector of lists with input from console
我一直在研究涉及树的问题的解决方案。我的策略是接受输入并将图形表示为邻接表。不幸的是,我遇到了分段错误,无法弄清楚我在这里做错了什么。
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 减一)。
我一直在研究涉及树的问题的解决方案。我的策略是接受输入并将图形表示为邻接表。不幸的是,我遇到了分段错误,无法弄清楚我在这里做错了什么。
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 减一)。