我在SPOJ上遇到this问题而且我一直遇到运行时错误(SIGABRT),而且我从来没有真正体验过这个问题。当我在VS中运行我的代码时,它正常工作,但SPOJ给了我这个错误。我想知道你是否能告诉我为什么我会得到它。
这是我的代码:
#include <iostream>
#include <stdio.h>
#include <vector>
#include <string>
#include <queue>
#include <map>
using namespace std;
vector<int> marked;
vector<vector<int>> edges;
bool colorable;
void bfs(int v) {
colorable = true;
switch (marked[v]) {
case 0:
case 1:
marked[v] = 1;
for (int i = 0; i < edges[v].size(); i++) {
if (marked[edges[v][i]] != 1) {
marked[edges[v][i]] = 2;
}
else {
colorable = false;
break;
}
}
break;
case 2:
for (int i = 0; i < edges[v].size(); i++) {
if (marked[edges[v][i]] != 2) {
marked[edges[v][i]] = 1;
}
else {
colorable = false;
break;
}
}
}
}
int main() {
int N, M, a, b;
while (scanf("%d", &N) != 0) {
colorable = true;
while (N--) {
marked.push_back(0);
edges.push_back({ });
}
scanf("%d", &M);
while (M--) {
scanf("%d", &a);
scanf("%d", &b);
edges[a].push_back(b);
edges[b].push_back(a);
}
for (int i = 0; i < marked.size(); i++) {
bfs(i);
}
colorable ? printf("BICOLORABLE\n") : printf("NOT BICOLORABLE\n");
marked.clear();
edges.clear();
}
return 0;
}
我已经尝试过谷歌搜索其他类似的问题以及SIGABRT错误究竟是什么,我仍然感到困惑。谢谢你的帮助。
答案 0 :(得分:0)
我发现了问题,如果有人遇到类似的问题,我会在这里发布。这条线
while(scanf("%d", &N) != 0)
显然不被SPOJ赞赏。我把它分成两行
scanf("%d", &N);
while(N !=0 ) {}
一切正常。感谢您的意见,以帮助我理解错误。