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