首页 > 技术文章 > 邻接表模板

zero-begin 2015-04-28 13:25 原文

1.数组模拟链表实现

struct edge{
    int u,v,w,next;
}a[MAX];
int E,u,v,w;
E = 0;
memset(head,-1,sizeof(head));
void add(int u,int v,int w){
    a[E].u = u;a[E].v = v;a[E].w = w;
    a[E].next = head[u];head[u] =E++;
    //head记录以u为结点的边的编号,a[E].next是模拟指针
    //a是边,其中记录的是边上的结点,权值的值
}
for(i = head[u];i!= -1;i = a[i].next){
    //来取值进行操作
    .......
}
View Code

~u   相当于u!=-1

2.vector实现(vector是向量,是一个可变长的动态数组,记录的是该节点相邻的所有的结点)

 

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
vector<int>G[MAX];
void read_tree()
{
    int u,v;
    scanf("%d",&n);
    for(int i = 0  ; i < n; i++){
        scanf("%d%d",&u,&v);
        G[u].push_back(v);
        G[v].push_back(u);
    }
}//记录的是一个结点相邻的点
for(int i = 0 ; i < G[u].size(); i ++){
    int v= G[u][u];
   ....
}
View Code

 

推荐阅读