2015-01-19 4 views
0

Мой код пытается реализовать алгоритм объединения-поиска, и у меня есть массив id [] и массив sz []. Я инициализирую их в конструкторе Union-Find, но как только я попытаюсь использовать эти массивы в методах в классе Union-Find, он изменит все значения массива на 1. Я не понимаю, почему. Есть ли что-то очевидное, что мне не хватает?Инициализация массива C++

H Файл

class UnionFind{ 
public: 
    UnionFind(int size); 
    void join(int x, int y); 
    int connected(int x, int y); 
    int find(int x); 

private: 

    int size; 
    int id[]; 
    int sz[]; 

}; 

CPP Файл

UnionFind::UnionFind(int size){ 
     this->id[size] = id[size]; 
     for(int i = 0; i < size; i++){ 
      id[i] = i; 
     } 
     for(int i = 0; i < size; i++){ 
      sz[i] = 1; 
     } 
    } 

    int UnionFind::find(int l){ 
     //Path Compression Finding the Root 
     for(int i = 0; i < 5; i++){ 
     } 
     while(l != id[l]){ 
      id[l] = id[id[l]]; 
      l = id[l]; 
     } 
     return l; 

    } 

    void UnionFind::join(int x, int y){ 
     int m = find(x); 
     int n = find(y); 

     if(sz[m] < sz[n]){ 
      id[m] = n; 
      sz[n] += sz[m]; 
     } 
     else{ 
      id[n] = m; 
      sz[m] += sz[n]; 
     } 
    } 

    int UnionFind::connected(int x, int y){ 
     if(find(x) == find(y)){ 
      return 1; 
     } 
     else{ 
      return 0; 
     } 
    } 
+1

У вас не может быть данных, таких как 'int id []' в стандартном C++. – juanchopanza

+0

Используйте 'std :: vector' вместо массивов в этом случае. – David

+0

два наблюдения (1) вы не задаете размер члена 'size' (2), вы выполняете путь, не уменьшающий путь, а не путь. – saadtaame

ответ

2

от комментариев.

  • вы не можете иметь int id[] в качестве члена класса,
  • использование std::vector (изменение размера и заполнения в конструкторе),
  • Ваш забыли установить элемент size в конструкторе,
  • ваш алгоритм находкой использует путь сокращение пополам без сжатия пути (это не влияет на время работы).

Сторона примечания: вы можете использовать один массив/вектор для реализации структуры данных непересекающихся множеств.

Смежные вопросы