用vector或set建立邻接表

用vector或set建立邻接表

在一般情况下使用链表建立的邻接表就行,但若对节点下的子树的顺序有要求的话(树和图的搜索),链表显然不方便,他的顺序在输入时就固定了,所以这时就可以使用vectorset来构建邻接表了

这样也就方便排序了

P5318 【深基18.例3】查找文献 - 洛谷

思路与链表法相同,只是将链表换成vectorset

图
0 1,2
1 3,4
2 NULL
3 NULL
4 5
5 NULL

无权图

vector<int> p[N];

void add(int a, int b) {
    p[a].push_back(b);
}

有权图

链表法是添加一个w[N]数组存权重,这里可以直接用结构体vector

struct node {
	int v, w; // 边的终点编号 权重
};
vector<node> p[N];

void add(int a, int b, int w) {
	p[a].push_back((node){b, w});
}

正如上面洛谷的那道题,他需要有序,用vector存完后排个序就行,但也可以使用set代替vector,省去排序操作,但一般没必要

posted @ 2023-08-27 23:01  -37-  阅读(10)  评论(0编辑  收藏  举报