前言:邻接表一直图方便 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++;
}
};