运行时错误(SIGBART) - SPOJ Bicolorable

时间:2015-10-09 05:32:21

标签: c++11 runtime-error

我在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错误究竟是什么,我仍然感到困惑。谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

我发现了问题,如果有人遇到类似的问题,我会在这里发布。这条线

while(scanf("%d", &N) != 0)

显然不被SPOJ赞赏。我把它分成两行

scanf("%d", &N);
while(N !=0 ) {}

一切正常。感谢您的意见,以帮助我理解错误。