邻接表的建立函数
void addEdge( int u, int v )
{
edge[e].v = v;
edge[e].next = head[u];
head[u] = e++;
}//因为head[i]中的i就是起点,所以结构体中可以不再记录起点
解释:
head保存的是现在以u为起点的边,编号为head[i],遍历结束,最后head中保存的将是以u为起点的最后一条边,而edge[].next中存的是以u为起点的上一条边,用于遍历时可以顺着next找到所有的以u为起点的边,找的方法如下:
for ( int i = head[u]; i != -1; i = edge[i].next )
{
statement;//在这里面就可以利用edge[i],即与u有关系的边,找到是第几条边,再通过edge[i].v找到与u相连的点,再进行一系列操作
}
注:这种方法与存邻接矩阵的区别在于遍历的时候按边找,而不是按点找,按点找的方法如下(按点的话比较好想,但如果题目要用到边的话只能用第一种方法)
for(i=1;i<=m;i++)//遍历所有被选者
{
if(line[x][i]==1)
statement;
}