图的表示方法有邻接表和邻接矩阵。
邻接矩阵,实现方法是二维数组;
邻接表,实现方法是链表。
下面主要写出邻接表的代码实现方法:
边的定义:
struct Edges{ int v; Edges *next; }*head[N], edge[M];
头指针的初始化:
memset( head, 0, sizeof(head));
cnt = 1; //边的标号
加边函数:
void add ( int u, int v ) { edge[cnt].v = v; edge[cnt].next = head[u]; head[u] = &edge[cnt++]; //这里要注意给head[u]赋值的时候,edge那个结点前要加地址符&,head数组的类型是指针变量 }
for循环搜索一个点所连接的其他的点,或者搜索一个点的关联边:
for ( Edges *i = head[u]; i; i = i->next ) { int v = i->v; //这里要说明的是i就是这个要遍历的结点