前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度优先搜索遍历图

深度优先搜索遍历图

作者头像
每天学Java
发布2020-06-01 10:45:27
5320
发布2020-06-01 10:45:27
举报
文章被收录于专栏:每天学Java
深度优先搜索

深度优先搜索(DFS)每次沿着路径到达不能再前进时,退回到最近的岔道口向下继续遍历。换句话说每次路径不可达时,代表一条完整路径形成。

实现过程

连通分量:在无向图中,如果两个顶点可以相互到达(可以通过一定路径间接到达),那么称这个两个顶点连通,如果图G中任意两个顶点都连通,则称图G为连通图, 否则称为非连通图,其中极大连通子图称为连通分量。

强连通分量:在有向图中,如果两个顶点可以各自通过一条有向路径到达另一顶点,就称这两个顶点强连通,如果图G任意两个顶点都能强连通,那么图G称为 强连通图,否则称为非强连通图,其中极大强连通子图称为强连通分量

可以知道如果遍历整个图,就需要对所有连通块(连通分量和强连通分量)进行遍历。基本思想就是在遍历的过程中,将经过的顶点设置为已遍历。

实现代码(C++)

基于上一篇图的构建,我们主要实现一下DFS核心代码

代码语言:javascript
复制
//DFS顶点
void DFS(int v){
    //邻接表
    cout<<"到达顶点"<<v<<endl;
    visit[v]=1;
    //所有能到达的点
    for (int i=0; i<adj[v].size(); i++) {
        int temp = adj[v][i].v;
        if (visit[temp]==0) {
            DFS(temp);
        }
    }
}
//DFS图
void DFSTrave(vector<Node> g[maxV]){
    for (int i=0; i<maxV; i++) {
        if(!g[i].empty() &&visit[i]==0){
            DFS(i);
        }
    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 每天学Java 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 深度优先搜索
  • 实现过程
  • 实现代码(C++)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档