[2016-01-27][ACM][邻接表数组实现]

[2016-01-27][ACM][邻接表数组实现]

邻接表

1
2
3
4
5
6
7
8
9
10
11
12
const int maxn = 10000 + 100;
const int maxedge = (50000 + 100)*2;
int head[maxn];//head[i]表示第i个顶点,第一个链节的编号
int next[maxedge];//表示 第 q 号链节,下一个链节的编号
int end[maxedge];//表示 第 q 个链节 的终点
int vis[maxedge];//表示第q个链节是否被访问过.
void addedge(int from,int to){
        static int q = 2;
        end[q] = to;
        next[q] = head[from];
        head[from] = q++;
}


访问 cur 所有关联的边(以cur为起点)
1
2
3
4
        for(int q = head[cur];q;q = next[q])
        {
                //do some thing.
        }

q 初始化 为 2的原因

各个数字的二进制

2: 010    3: 011
4: 100    5: 101
在读无向边的时候,成对地保存,那么一直其中一条有向边编号a,只需要 a^1(xor) 就可以得到另外一条反向的边
 







来自为知笔记(Wiz)


posted on 2016-01-27 22:08  红洋  阅读(154)  评论(0)    收藏  举报

导航