void kruskal() { int i, e; pq_init(); find_init(); //1. 모든 정점을 pq삽입한다. // 우선순위 큐가 가중치가 가장 낮은 것이 루트가 되도록 정렬 for (i = 0; i < E; i++) pq_insert(i); while (!pq_empty()) { e = pq_remove(); //2. 분리집합인지 확인한다. // edge[e]의 양쪽 정점이 같은 집합에 속해 있는지 확인 한 후 // 같은 집합이 아니면 최소 신장 트리에 추가 // 집합을 합친다. if (find_set(edge[e].v1, edge[e].v2)) { printf("%c %c\n", int2name(edge[e].v1), int2name(edge[e].v2)); cost += edge[e].weight; } } printf("최소비용 : %d\n", cost); }
static char *pq_min_test() { int i; int test_data[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; struct pq *queue = pq_create(int_min_cmp); for (i = 0; i < 10; i++) { pq_insert(queue, &test_data[i]); } for (i = 0; i < 10; i++) { int val = *((int *)pq_remove(queue)); mu_assert("values removed out of order\n", val == test_data[i]); } pq_destroy(queue); return 0; }