Bootstrap

图的建立,数组法建立邻接表

邻接表的建立函数

 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;
    }

;