边结构体:
typedef struct
{
int to;
int next;
} Edge;
还需一个整型以及一个数组辅助变量。完整结构为:
#define MaxV 100
#define MaxE 10000
typedef struct
{
int to;/*当前边的终端点*/
int next;/*也是以当前边的初始点为初始点的、与当前边相邻的另一条边在E[]中的index*/
} Edge;
Edge E[MaxE];
int Adj[MaxV];/*每个顶点的最后一条边*/
int Size;/*边的条数*/
Adj取英文中的Adjacent前3个字母,意为相邻。这儿存储的是每个顶点的最后一条边。
图的初始化函数为:
void Init(int N)/*N为当前图的顶点数*/
{
int i;
for(i=0; i<=N; ++i)
{
Adj[i]=-1;
}
Size=0;
return;
}
添加边的函数为:
void Add_Edge(int u,int v)/*添加一条有向边u-->v*/
{
E[Size].to=v;
E[Size].next=Adj[u];
Adj[u]=Size++;
return;
}
遍历以某顶点u为初始点的所有边:
void Show(int u)
{
int i;
for(i=Adj[u]; ~i; i=E[i].next)
{
printf("%d-->%d\n",u,E[i].to);
}
return;
}
如果每条边还需有其他的元素的话,Edge的结构体中还需加入对应元素。
该结构体与邻接矩阵相比的话。在稀疏图上完胜,在稠密图上,则还是建议使用邻接矩阵。