1065: 无向图的连通分量计算

简介: 1065: 无向图的连通分量计算

题目描述


假设无向图G采用邻接矩阵存储,编写一个算法求连通分量的个数。


输入

第一行为一个整数n,表示顶点的个数(顶点编号为0到n-1),接下来是为一个n*n大小的整数矩阵,表示图的邻接关系。数字为0表示不邻接,1表示不邻接。


输出

连通分量的个数。


样例输入

5

0 1 0 1 1

1 0 1 1 0

0 1 0 1 1

1 1 1 0 1

1 0 1 1 0


样例输出

1

#include <iostream>
using namespace std;
int n, ans;
const int N = 1010;
int g[N][N],st[N];
void dfs(int x, int y)
{
  st[x] = st[y] = 1;
  for(int i = 0; i < n; i++)
    if(!st[i])
      dfs(y ,i);
}
int main()
{
  cin>>n;
  for(int i = 0; i < n; i++)
    for(int j = 0; j < n; j++)
      cin>>g[i][j];
  for(int i = 0; i < n; i++){
    for(int j = 0; j < n; j++){
      if(g[i][j]&&!st[i]){
        dfs(i, j);
        ans++;
      }
    }
  }
  cout<<ans;
  return 0;
}


目录
相关文章
|
5月前
|
存储 算法
有向图和无向图的表示方式(邻接矩阵,邻接表)
有向图和无向图的表示方式(邻接矩阵,邻接表)
161 0
|
5月前
|
算法
图的应用(最小生成树,最短路径,有向无环图)
图的应用(最小生成树,最短路径,有向无环图
29 0
|
存储 算法 搜索推荐
拓扑排序:求取拓扑序列
拓扑排序简单讲就是在可求拓扑序列的有向无回路图(有向无环图)中求取拓扑序列的排序算法。通俗讲就是按活动的先后次序进行排序的序列,并且每一个顶点只出现一次,它可以表述出完成某一项活动所需要的前置活动
71 0
拓扑排序:求取拓扑序列
|
存储
图操作之邻接矩阵与邻接表的深度优先遍历
图操作之邻接矩阵与邻接表的深度优先遍历
152 0
|
存储 算法
SWUSTOJ 1057: 有向图的出度计算
SWUSTOJ 1057: 有向图的出度计算
97 0
|
机器学习/深度学习
有向图,无向图的邻接矩阵和邻接表模板
有向图,无向图的邻接矩阵和邻接表模板
175 0
有向图,无向图的邻接矩阵和邻接表模板
邻接矩阵求顶点度
邻接矩阵求顶点度
294 0
|
机器学习/深度学习 算法 C语言
【算法导论】有向图的可达矩阵
        有时候,我们关注的不是从一个地点到另一个地点的费用,而是能否从一个顶点到达另一个顶点。因此我们可以假设所有边的权值为单位1,在下面的算法中,我们可以在O(n*n*n)的时间内计算出图中任意两点是否可达,我用可达矩阵来表示有向图中两者是否可达。
2890 1
|
算法
图的最短路径—— dijkstra算法
算法的思想如下:规定一个 出发点,然后先初始化距离数组。数组中的每个下标就对应一个结点,每个数据项就是出发点到每个结点的距离。1:将一个集合分为两部分,一个是已经找过的结点U,一个是没有找到过的v2:在距离的数组中,没有访问过的结点中找一个权重最小的边,然后将这个结点添加到u中,并且以这个结点作为中间结点,来更新数组,判断条件是i到temp+temp到j 的距离是不是小于i到j的距离,若是,则就要更新。
1345 0