Example #1
0
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);
}
Example #2
0
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;
}