int main() { // -----------------비 최적화 코드 사용-------------------------- // // 집합 size개 생성 ufp u = (ufp)malloc(sizeof(uf) * size); set_init(u, size); printf("\n1) "); Union(u, 0, 1); // {0,1},{2},{3},{4},{5},{6} for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n2) "); Union(u, 2, 3); // {0,1},{2,3},{4},{5},{6} for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n3) "); Union(u, 4, 5); // {0,1},{2,3},{4,5},{6} for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n4) "); Union(u, 1, 2); // {0,1,2,3},{4,5},{6} for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n5) "); Union(u, 3, 4); // {0,1,2,3,4,5},{6} for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n6) "); Union(u, 5, 6); // {0,1,2,3,4,5,6} for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n"); // 합집합 결과 보기 <가중 법칙 적용 x> printf("\n(비최적화) 합 집합 결과: "); for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n\n"); free(u); // -----------------최적화 코드 사용-------------------------- // // 집합 size개 생성 u = (ufp)malloc(sizeof(uf) * size); set_init(u, size); fast_Union(u, 0, 1); // {0,1},{2},{3},{4},{5},{6} printf("1) "); for (int i = 0; i < size; i++) { printf("[%d", u[i].parent); if (u[i].parent == -1) printf(",count:%d] ", u[i].count); else printf("] "); } printf("\n2) "); fast_Union(u, 2, 3); // {0,1},{2,3},{4},{5},{6} for (int i = 0; i < size; i++) { printf("[%d", u[i].parent); if (u[i].parent == -1) printf(",count:%d] ", u[i].count); else printf("] "); } printf("\n3) "); fast_Union(u, 4, 5); // {0,1},{2,3},{4,5},{6} for (int i = 0; i < size; i++) { printf("[%d", u[i].parent); if (u[i].parent == -1) printf(",count:%d] ", u[i].count); else printf("] "); } printf("\n4) "); fast_Union(u, 1, 2); // {0,1,2,3},{4,5},{6} for (int i = 0; i < size; i++) { printf("[%d", u[i].parent); if (u[i].parent == -1) printf(",count:%d] ", u[i].count); else printf("] "); } printf("\n5) "); fast_Union(u, 3, 4); // {0,1,2,3,4,5},{6} for (int i = 0; i < size; i++) { printf("[%d", u[i].parent); if (u[i].parent == -1) printf(",count:%d] ", u[i].count); else printf("] "); } printf("\n6) "); fast_Union(u, 5, 6); // {0,1,2,3,4,5,6} for (int i = 0; i < size; i++) { printf("[%d", u[i].parent); if (u[i].parent == -1) printf(",count:%d] ", u[i].count); else printf("] "); } // 합집합 결과 보기 <경로압축 및 가중 법칙 적용> printf("\n\n(최적화) 합 집합 결과: "); for (int i = 0; i < size; i++) printf("[%d] ", u[i].parent); printf("\n"); free(u); return 0; }