首页 > 编程语言 > 详细

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

时间:2016-01-27 23:13:10      阅读:563      评论:0      收藏:0      [点我收藏+]
[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) 就可以得到另外一条反向的边
 









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

原文:http://www.cnblogs.com/qhy285571052/p/5164723.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!