C++ vector建立无向图并遍历
2023-12-13 05:01:38
如果题目中,以[[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});
文章来源:https://blog.csdn.net/m0_52043808/article/details/134811529
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!