This commit is contained in:
2026-09-07 18:48:16 +08:00
parent 1564716731
commit c945aa211f
138 changed files with 10337 additions and 150 deletions
+56
View File
@@ -0,0 +1,56 @@
#ifndef INCLUDED_C_CC_H
#define INCLUDED_C_CC_H
#ifndef INCLUDED_C_GRAPH_H
#include <c_Graph.h>
#endif /*INCLUDED_C_GRAPH_H*/
/* ------------------------------------------------------------------------------------------------------------------ */
/* */
typedef struct {
c_bool_t* marked; // marked[v] = has vertex v been discovered?
c_size_t* id; // id[v] = connected component identifier id of v
c_size_t* size; // size[id] = number of vertices in component id
c_size_t count; // Total number of isolated connected components
c_size_t V;
c_Allocator_t allocator; // Memory allocator reference instance copy
} c_CC_t;
/**
* @brief Computes the connected components partition of an undirected graph.
* @param self Pointer to the uninitialized connected components state tracker.
* @param G Pointer to the constant target graph object to process.
* @param allocator Memory allocator instance pointer to deploy.
* @return C_SUCCESS on success, or an error status code on allocation failure.
*/
c_err_t c_CC_Init(c_CC_t* self, const c_Graph_t* G, c_Allocator_t* allocator);
/**
* @brief Drops all internal allocation states within the CC structural instance safely.
*/
void c_CC_Destroy(c_CC_t* self);
/**
* @brief Are vertices v and w in the same connected component cluster?
*/
c_bool_t c_CC_Connected(const c_CC_t* self, c_VertexId_t v, c_VertexId_t w);
/**
* @brief Returns the component identifier id containing vertex v (ranges from 0 to Count()-1).
*/
c_size_t c_CC_Id(const c_CC_t* self, c_VertexId_t v);
/**
* @brief Returns the number of vertices in the connected component cluster containing vertex v.
*/
c_size_t c_CC_Size(const c_CC_t* self, c_VertexId_t v);
/**
* @brief Returns the total number of connected components clusters in the graph.
*/
c_size_t c_CC_Count(const c_CC_t* self);
#endif /*INCLUDED_C_CC_H*/