如果题目中,以[[1,2],[1,3],[1,4],[2,3],....]这种方式给出边。可用使用vector建图。
首先定义一个二维的vector
vector<vector<int>>g(n+1);//n为顶点数
然后遍历每一条边,假设遍历时两边的顶点分别为a,b。如果是无向边,则可添加顶点。
g[a].push_back(b);
g[b].push_back(a);
图的遍历:假设遍历a点的邻接点
for(auto ne:g[a]){
处理ne
}
dfs遍历无向图(后序遍历)
dfs(i):
for (auto ne:g[i]):
dfs(ne)
处理i
这样写会重复遍历,为了防止遍历的时候走回去,需要多一个参数来记录上一个走的是什么。
dfs( i , pre ) :
for( auto ne:g[i] ):
if ne==pre|| ne ==i :continue
dfs(ne)
处理i
如果建立的边带有权值,那么就使用 vector<vector<pair<int,int>>>g, 来建图。
假设有边 {a,b,w}
g[a].push_back({b,w});
g[b].push_back({a,w});