크루스칼

    [python] 백준 - 11085. 군사 이동

    [python] 백준 - 11085. 군사 이동

    🤔문제 해결 크루스칼 C에서 출발! 갈 수 있는 곳을 찾아서 우선순위 큐에 넣는다. 우선순위 큐에서 넓이가 가장 넓은 녀석을 뽑는다. 거기서 또 갈 수 있는 곳을 찾아서 큐에 넣는다. (단, 재방문 X) V를 만나면 끝! 노드를 이동하는 동안 최소값을 계속 갱신해준다. (답을 찾아야하므로) 💻소스 코드 import sys from collections import defaultdict import heapq input = sys.stdin.readline P, W = map(int, input().split()) # P개의 지점, W개의 길 C, V = map(int, input().split()) # C 백준수도, V 큐브수도 # 인접노드 만들기 nodes = [input() for _ in range..

    크루스칼 알고리즘(kruskal)

    크루스칼 알고리즘(kruskal)

    📔 크루스칼(kruskal) 이란 간선을 하나씩 선택해서 MST를 찾는 알고리즘 ( 프림은 정점을 선택, 크루스칼은 간선을 선택 ) 최초 모든 간선을 가중치에 따라 오름차순으로 정렬 가중치가 가장 낮은 간선부터 선택하면서 트리를 증가시킨다 사이클이 존재하면 패쓰 ( 사이클의 존재를 파악하는게 중요! ) V-1개의 간선이 선택될 때 까지 반복 가장 적은 비용으로 모든 노드를 연결하기 위해 사용하는 알고리즘 disjoint-set 알고리즘을 이용한다. 📔 크루스칼(kruskal) 구현 def make_set(x): p[x] = x def find_set(x): if p[x] == x: return x else: p[x] = find_set(p[x]) return p[x] def union(x, y): px ..

    최소 신장 트리(Minimum Spanning Tree)

    최소 신장 트리(Minimum Spanning Tree)

    그래프에서 최소 비용을 구하는 문제 1. 모든 정점을 연결하는 간선들의 가중치합이 최소가 되는 트리 - 프림과 크루스칼 두가지 형태가 있다. (프림은 정점을 기준으로, 크루스칼은 간선을 기준으로 MST를 만들어간다.) 2. 두 정점 사이의 최소 비용 경로 찾기 - BFS에서 가중치가 추가된 형태 신장 트리 1. n 개의 정점으로 이루어진 무방향 그래프에서 n 개의 정점과 n-1 개의 간선으로 이루어진 트리 최소 신장 트리 1. 무방향 가중치 그래프에서 신장 트리를 구성하는 간선들의 가중치의 합이 최소인 신장 트리 그래프의 표현 1. 인접 행렬 2. 인접 리스트 🟨 프림 알고리즘: 프림 알고리즘은 하나의 정점에 연결된 간선중 가중치가 최소인 정점을 선택한다. 하나의 정점에서 연결된 간선들 중에 하나씩 선택..