본문 바로가기
이것저것

union-find 알고리즘(파이썬 코드)

by 문자메일 2018. 8. 19.

#union-find

#disjoint-set algorithm : 구체적으로 여러 개의 노드가 존재할 때 두 개의 노드를 선택해서, 현재 이 두 노드가 서로 같은 그래프에 속하는지 판별하는 알고리즘


def getParent(parent, num):

    if parent[num] == num :

    return num

    else :

    return getParent(parent, parent[num])


#각 부모 노드를 합친다.

def unionParent(parent, num1, num2):

    a = getParent(parent, num1)

    b = getParent(parent, num2)

    #각 원소의 부모 동일 유무 체크

    if a == b:

        return

    else:

    if a < b:

    parent[b] = a

    else:

    parent[a] = b

    #두 set의 root 중 하나를 다른 root에 붙인다.


#같은 부모 노드를 가지는지 확인한다.

def findParent(parent, num1, num2):

    a = getParent(parent, num1)

    b = getParent(parent, num2)

    if a == b :

    return 1

    elif a != b :

    return 0


#main

parent = [0]

for i in range(1,11):

    parent.append(i)

unionParent(parent, 1, 2)

unionParent(parent, 2, 3)

unionParent(parent, 3, 4)

unionParent(parent, 5, 6)

unionParent(parent, 6, 7)

unionParent(parent, 7, 8)

print('1과 5는 연결되어 있나요? %d' % findParent(parent, 1, 5))

unionParent(parent, 1, 5)

print('1과 5는 연결되어 있나요? %d' % findParent(parent, 1, 5))


for i in range(1,11):

    print(parent[i])



'이것저것' 카테고리의 다른 글

파이썬 데이터타입  (0) 2019.03.10
pandas, kaggle 정리  (0) 2019.01.28
파이썬 기본 문법 정리  (0) 2018.08.19
네트워크 플로우 알고리즘  (0) 2018.07.24
git 명령어  (0) 2018.05.26

댓글