您的位置:首页 > 其它

边存储结构体:链式前向星

2012-04-02 15:18 561 查看
边结构体:

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的结构体中还需加入对应元素。

该结构体与邻接矩阵相比的话。在稀疏图上完胜,在稠密图上,则还是建议使用邻接矩阵。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: