学习笔记--图论DFS,联通分量,时间戳

本文介绍了一个使用深度优先搜索(DFS)算法遍历图的数据结构示例,并展示了如何通过递归实现节点的访问及连通分量的计算。代码中定义了图的邻接表表示法,并实现了基于递归的DFS遍历过程,记录了节点的访问时间及退出时间,同时为每个连通分量分配了唯一标识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1 #include<iostream>
  2 #include<vector>
  3 using namespace std;
  4 
  5 const int maxn=12;
  6 
  7 int vis[maxn];
  8 
  9 vector<int> G[maxn];
 10 
 11 
 12 int dfs_clock;
 13 int pre[maxn];
 14 int post[maxn];
 15 int cc[maxn];
 16 int current_cc=0;
 17 void dfs(int u)
 18 {
 19   //pre
 20 
 21    vis[u]=1;
 22    pre[u]=++dfs_clock;
 23    cc[u]=current_cc;
 24    for(int i=0;i<G[u].size();i++)
 25    {
 26        int v=G[u][i];
 27       if(!vis[v]) dfs(v);
 28 
 29    }
 30 
 31    post[u]=++dfs_clock;
 32   //post
 33 }
 34 
 35 void init()
 36 {
 37   for(int i=0;i<12;i++)
 38     vis[i]=0;
 39 
 40   G[0].push_back(1);
 41   G[0].push_back(4);
 42 
 43   G[1].push_back(0);
 44 
 45   G[2].push_back(3);
 46   G[2].push_back(6);
 47   G[2].push_back(7);
 48 
 49 
 50   G[3].push_back(2);
 51   G[3].push_back(7);
 52 
 53 
 54   G[4].push_back(0);
 55   G[4].push_back(8);
 56   G[4].push_back(9);
 57 
 58 
 59   G[6].push_back(2);
 60    G[6].push_back(7);
 61     G[6].push_back(10);
 62 
 63   G[7].push_back(2);
 64   G[7].push_back(3);
 65   G[7].push_back(6);
 66   G[7].push_back(10);
 67   G[7].push_back(11);
 68 
 69   G[8].push_back(4);
 70   G[8].push_back(9);
 71 
 72 
 73   G[9].push_back(4);
 74    G[9].push_back(8);
 75 
 76     G[10].push_back(6);
 77     G[10].push_back(7);
 78 
 79     G[11].push_back(7);
 80 
 81     dfs_clock=0;
 82 }
 83 
 84 
 85 int main()
 86 {
 87     init();
 88 
 89     for(int i=0;i<12;i++)
 90     {
 91        if(vis[i]==0)
 92        {
 93            current_cc++;
 94            dfs(i);
 95        }
 96 
 97     }
 98 
 99 
100 
101    //    dfs(0);
102     for(int i=0;i<12;i++)
103        cout<<i+1<<" "<<pre[i]<<" "<<post[i]<<" "<<cc[i]<<endl;
104 
105 
106 }

 

转载于:https://www.cnblogs.com/814jingqi/p/3247212.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值