1

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

#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当我循环它说 50 或 100 次时,这会打印正确的答案。但是当我循环它像 1000 次或更多次时,它给了我所有的 0。我正在使用代码块 ide。

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

4

0 回答 0