최소 신장 트리는 가중치가 할당된 무방향 그래프에서 모든 정점을 포함하면서 간선의 가중치 합이 최소가 되는 트리입니다.
C에서는 일반적으로 구조체와 배열, 포인터를 사용해 그래프와 트리를 표현합니다. 프림(Prim)이나 크루스칼(Kruskal) 알고리즘을 이용해 최소 신장 트리를 구현할 수 있습니다.
#include <stdio.h>
struct Edge {
int src, dest, weight;
};
void kruskal(struct Edge edges[], int V, int E) {
// ... (코드 생략)
}
int main() {
struct Edge edges[] = { /* 초기화 */ };
int V = 5, E = 7;
kruskal(edges, V, E);
return 0;
}
Python에서는 리스트와 딕셔너리를 이용해 간단하게 그래프를 표현할 수 있습니다. 프림이나 크루스칼 알고리즘을 사용하여 최소 신장 트리를 구현할 수 있고, 다양한 내장 라이브러리를 활용할 수 있습니다.
def kruskal(graph):
# ... (코드 생략)
graph = {
'vertices': ['A', 'B', 'C', 'D', 'E'],
'edges': [(1, 'A', 'B'), (2, 'A', 'C'), (3, 'B', 'C'), (4, 'B', 'D'), (5, 'C', 'D'), (6, 'D', 'E')]
}
kruskal(graph)
C언어는 메모리 관리와 성능을 최적화할 수 있는 반면, 구현이 복잡하고 디버깅이 어려울 수 있습니다. Python은 라이브러리와 간단한 문법을 활용해 빠르게 구현할 수 있지만, 실행 속도가 느리고 메모리 사용이 높을 수 있습니다.