Web Dev/2. JS 알고리즘

[알고리즘] Union-Find

hYhY1234 2021. 5. 12. 18:52
728x90
// 그래프 관련 처리
// 대표적인 그래프 관련 알고리즘 Union-Find(합집합 찾기)

// 부모노드를 찾는 함수
function getParent(parentArr, x){
  if(parentArr[x] === x){
    return x;
  }
  parentArr[x] = getParent(parentArr, parentArr[x]);
  return parentArr[x];
}

// 두 부모노드를 합치는 함수
function unionParent(parentArr, a, b){
  a = getParent(parentArr, a);
  b = getParent(parentArr, b);
  if(a < b) parentArr[b] = a;
  else parentArr[a] = b; // 항상 더 작은 값으로
}

// 같은 부모를 가지는지 확인
function findParent(parentArr, a, b){
  a = getParent(parentArr, a);
  b = getParent(parentArr, b);
  
  if(a == b) return 1;
  return 0;
}

const parentArr = [];
for(let i = 0; i <= 10; i++){
  parentArr.push(i);
}

unionParent(parentArr, 1, 2);
unionParent(parentArr, 2, 3);
unionParent(parentArr, 3, 4);
unionParent(parentArr, 5, 6);
unionParent(parentArr, 6, 7);
unionParent(parentArr, 7, 8);

parentArr;

console.log("1, 5 연결?", findParent(parentArr, 1, 5))

unionParent(parentArr, 1, 5)
console.log("1, 5 연결?", findParent(parentArr, 1, 5))