[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) 就可以得到另外一条反向的边
浙公网安备 33010602011771号