Đây là chức năng và ý nghĩa của các biến truyền vào. Để hiểu rõ cách dùng có thể xem Demo-cgraph
int cgraph_degree_one(const cgraph_t *graph, CGRAPH_INTEGER *res, const CGRAPH_INTEGER node, cgraph_neimode_t mode, bool loops);
const cgraph_t *graph // địa chỉ của biến cgraph (cgraph_t B => truyền vào &B)
CGRAPH_INTEGER *res // biến sẽ nhận giá trị bậc vào/ra của đỉnh
const CGRAPH_INTEGER node // đỉnh cần xác định bậc vào/ra
cgraph_neimode_t mode // chế độ vào/ra (CGRAPH_OUT/CGRAPH_IN)
bool loops // đồ thị có hướng hay không (true/false)
int cgraph_neighbors(const cgraph_t *graph, cgraph_ivec_t* neis, CGRAPH_INTEGER vid, cgraph_neimode_t mode);
const cgraph_t *graph // địa chỉ của biến cgraph (cgraph_t B => truyền vào &B)
cgraph_ivec_t* neis // mảng nhận giá trị của nhứng người hàng xóm
CGRAPH_INTEGER vid // đỉnh cần xác định
cgraph_neimode_t mode // chế độ vào/ra (CGRAPH_OUT/CGRAPH_IN)
int cgraph_create(cgraph_t *graph, cgraph_ivec_t const edges, CGRAPH_INTEGER n, bool directed);
cgraph_t *graph // địa chỉ của biến cgraph (cgraph_t B => truyền vào &B)
cgraph_ivec_t const edges // các cạnh của đồ thị đó
CGRAPH_INTEGER n // =0
bool directed // có hướng hay không (true/false)
cgraph_ivec_create()
VD: cgraph_ivec_t edges = cgraph_ivec_create();
Lệnh này để khởi tạo danh sách cạnh của đồ thị
int cgraph_ivec_push_back(cgraph_ivec_t *v, CGRAPH_INTEGER value)
VD: cgraph_ivec_push_back(&edges, (CGRAPH_INTEGER)A[i].ID)
cgraph_ivec_t cgraph_ivec_from_array(CGRAPH_INTEGER *a, CGRAPH_INTEGER n);
CGRAPH_INTEGER *a //mảng chứa giá trị
CGRAPH_INTEGER n //số phần từ trong mảng
int cgraph_ivec_print(cgraph_ivec_t const v);
int cgraph_ivec_free(cgraph_ivec_t *v);
int cgraph_add_edges(cgraph_t *graph, cgraph_ivec_t const edges)
cgraph_t *graph //địa chỉ biến đồ thị
cgraph_ivec_t const edges //các cạnh muốn thêm
void cgraph_destroy(cgraph_t *graph);
cgraph_t *graph //truyền vào địa chỉ biến đồ thị
bool cgraph_is_directed(const cgraph_t *graph);
typedef struct cgraph_s {
CGRAPH_INTEGER n; //số lượng đỉnh
bool directed; // có hướng hay không (true/false)
cgraph_ivec_t from; //cột đầu tiên của danh sách cạnh
cgraph_ivec_t to; //cột thứ 2 của danh sách cạnh
cgraph_ivec_t oi; //chỉ số của cạnh theo cột thứ nhất
cgraph_ivec_t ii; //chỉ só của cạnh theo cột thứ 2
cgraph_ivec_t os;
cgraph_ivec_t is;
void *attr;
} cgraph_t;
//Giải thích: Có 1 danh sách cạnh
0, 1,
0, 3,
1, 2,
1, 3,
2, 4,
0, 2,
3, 5,
3, 1,
1, 4
Ta có:
n = 6
directed = true
from = {0, 0, 1, 1, 2, 0, 3, 3, 1}
to = {1, 3, 2, 3, 4, 2, 5, 1, 4}
chỉ số 0 1 2 3 4 5 6 7 8 //chỉ số cạnh này sẽ dùng ở oi và ii
oi = {0, 5, 1, 2, 3, 8, 4, 7, 6} //sắp xếp theo đầu ra lần lươt từ đỉnh 0->5
ii = {0, 7, 5, 2, 1, 3, 8, 4, 6} //sắp xếp theo đầu vào lần lươt từ đỉnh 0->5
os = {0, 3, 6, 7, 9, 9, 9} //VD bậc ra của đỉnh i bằng os[i+1]-os[i]
is = {0, 0, 2, 4, 6, 8, 9} // bậc vào của đỉnh i bằng is[i+1]-is[i]