联合查找大型测试用例输出错误

时间:2015-03-21 15:44:29

标签: c++ codeblocks union-find

我使用快速查找方法编写了一个简单的联合查找实现。这是我的代码

#include <iostream>

using namespace std;

class QuickFind
{
    int* id;
    int size;
    public:
    QuickFind(int n)
    {
        id = new int[n];
        size = n;
        for(int i = 0; i < size; i++) id[i] = i;
    }
    bool is_connected(int p, int q)
    {
        return id[p] == id[q];
    }
    void do_union(int p, int q)
    {
        int tempP = p;
        int tempQ = q;

        for(int i = 0; i < size; i++)
        {
            if(id[i] == tempP) id[i] = tempQ;
        }
    }
};
int main()
{
    QuickFind obj(10000);
    obj.do_union(5,6);
    obj.do_union(6,8);

    cout<<obj.is_connected(5,6)<<endl;

    for(int i = 0; i < 1000; i++)cout<<obj.is_connected(i,i+1)<<endl;
    return 0;
}

我还在main中写了一个 for loop 。当我循环说50或100次时,这会打印正确的答案。但是当我将它循环1000次或更多次时,它给我全部0。我使用的是codeblocks ide。

当我在codechef的在线编译器中编译相同的代码时,我得到了正确的输出。谁能告诉我这个异常现象?

0 个答案:

没有答案