我使用快速查找方法编写了一个简单的联合查找实现。这是我的代码
#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的在线编译器中编译相同的代码时,我得到了正确的输出。谁能告诉我这个异常现象?