邻接表的两种模拟写法(模板)

前言:邻接表一直图方便 vector实现,从来没有被卡住时间。直到遇到poj3107.
1.vector:

struct edge
{
    int to,w;//更多关于边的属性可以自己添加,to连接的点,w权值。
};
vector<edge>G[MAX_N];//MAX_N点个数

加边操作: G[s].push_back(edge{t,w}); //建一条从s到t权值为w的边

遍历: for(vector<edge>::iterator it=G[s].begin();it!=G[s].end();it++){//把s点出发的边遍历一遍
               / /各种操作 
       }

http://ahalei.blog.51cto.com/4767671/1391988

上面的链接呢,是啊哈算法作者详细解释数组怎么模拟的过程,很好理解。
下面代码也是我找的网上写好的模板,可以直接拿来用!
2.数组实现

template<int N,int M>//N点的个数,M边的个数
struct Graph
{
    int top;
    struct Vertex{
        int head;
    }V[N];
    struct Edge{
        int v,next;
    }E[M];
    void init(){
        memset(V,-1,sizeof(V));
        top = 0;
    }
    void add_edge(int u,int v){
        E[top].v = v;
        E[top].next = V[u].head;
        V[u].head = top++;
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值