美文网首页
如何判断无向图是否连通

如何判断无向图是否连通

作者: 小幸运Q | 来源:发表于2018-09-06 17:24 被阅读28次

任取两个顶点,我们都能找到一条路径从一点到达另一个点,这个图就是连通的

1.DFS法:

把一个图的所有顶点都进行一次DFS,当然,进行DFS的前提必须是这个点没有被遍历过。所以如果一个图是连通的,那么从一个点开始DFS,所有的点都会被遍历到,这样其他4个顶点就不用再DFS了。按照这个思路,定义一个count为DFS过顶点的个数,如果count=1,则图为连通的,否则就是不连通的。

测试数据:

5 3
0 1
0 2
2 3

示例代码:

bool occupy[N]={false};
void DFS(vector<vector<Node>>&v,int start){
  vector<int>q;
  int i;
  q.push_back(start);
  occupy[start]=true;
  while(!q.empty()){
    int t=q.front();
    q.pop_back();
    occupy[t]=true;
    for(i=0;i<v[t].size();i++){
      if(occupy[v[t][i].num]==false){
        q.push_back(v[t][i].num);
      }
    }
  }
}
void check_connection(vector<vector<Node>>&v){
  int i,counts=0;
  for(i=0;i<points;i++){
    if(occupy[i]==false){
        DFS(v,i);
        counts++;
    }
  }
  cout<<"counts:"<<counts<<endl;
}

2. 交并集

int fathers[N]={0};
int points,edges;
int findfather(int num){
  int f=num;
  while(fathers[f]!=f){
    f=fathers[f];
  }
  int p=f;
  f=num;
  int t;
  while(fathers[f]!=f){
    t=fathers[f];
    fathers[f]=p;
    f=t;
  }
  return f;
}
void merge(int a,int b){
  int a1=findfather(a);
  int b1=findfather(b);
  fathers[a1]=b1;
}
bool check_connection(){
  int i;
  for(i=1;i<points;i++){
    if(findfather(i)!=findfather(i-1)){
      return false;
    }
  }
  return true;
}

相关文章

  • 如何判断无向图是否连通

    任取两个顶点,我们都能找到一条路径从一点到达另一个点,这个图就是连通的 1.DFS法: 把一个图的所有顶点都进行一...

  • 数据结构之图的基本操作

    一、判断图G是否存在边 或 (x, y) 1.1 如何判断无向图是否存在边 (C, D) ? 1.1...

  • 如何判断无向图是否无环

    当只有一棵树的时候,节点数==边数+1时肯定无环,但是如果有多个树的时候。就要对该树单独计算节点与边数了。 使用交...

  • 判断无向图是否联通

    对于一个无向图来说,判断其是否联通的思路并不复杂。从任意点出发,利用深度优先搜索(DFS),若是能遍历所有的点,则...

  • 图的基本概念2

    连通(无向图)与强连通(有向图) 常考考点:n个顶点的连通图(强连通图)最少有多少条边 如果原图是一个连通图或者强...

  • 活动分组——无向图的连通分量个数

    一、相关概念 连通分量 无向图中,极大连通子图称为连通分量1)连通图的连通分量只有一个,即自身2)非连通的无向图有...

  • 3. 最小生成树算法

    "图的基本概念"中,我们总结了无向图之连通图,有向图之强连通图概念,下面补充一些概念 连通网:在连通图中,若图的边...

  • 构造强连通图

    给定一张有向图,最少添加几条边使得有向图成为一个强连通图 ? ?以下内容为转载 将有向图变为强连通图①连通图 找出...

  • 图的连通性

    一、连通分量 1.1 定义 连通分量是针对无向图的,无向图G的极大连通子图称为G的连通分量( Connected ...

  • 极大连通子图 极小连通子图 连通分量

    有向图不存在极小连通子图的概念 连通图的生成树为该连通图的一个极小连通子图

网友评论

      本文标题:如何判断无向图是否连通

      本文链接:https://www.haomeiwen.com/subject/lzvzwftx.html