利用深度遍历算法实现

int getNum(MGraph G) {

int i, count = 0;

for(i = 0; i < G.vexnum; i++)

visited[i] = false;

for(i = 0; i < G.vexnum; i++)

if(!visited[i]) {

count++;

DFS(G, i);

}

return count;

}

测试代码如下:

以下代码以邻接表作为图的存储方式

#include

#include

#define MAXVEX 10

typedef int VertexType;

typedef struct arcNode {

int adjvex;

struct arcNode *next;

} arcNode;

typedef struct vertexNode {

VertexType data;

arcNode *first;

} vertexNode, adjList[MAXVEX];

typedef struct {

adjList adjlist;

int vexnum, arcnum;

} ALGraph;

//邻接表初始化

void createALGraph(ALGraph &G) {

int i, j, k;

arcNode *e;

printf("输入顶点数和边数:\n");

scanf("%d%d", &G.vexnum, &G.arcnum);

for(i = 0; i < G.vexnum; i++) {

scanf("%d", &G.adjlist[i].data);

G.adjlist[i].first = NULL;

}

for(k = 0; k < G.arcnum; k++) {

printf("输入边(vi, vj)上的顶点序号:\n");

scanf("%d%d", &i, &j);

e = (arcNode *)malloc(sizeof(arcNode));

e->adjvex = i;

e->next = G.adjlist[j].first;

G.adjlist[j].first = e;

e = (arcNode *)malloc(sizeof(arcNode));

e->adjvex = j;

e->next = G.adjlist[i].first;

G.adjlist[i].first = e;

}

}

//深度优先遍历

int visited[MAXVEX];

void DFS(ALGraph G, int i) {

arcNode *p;

visited[i] = 1;

p = G.adjlist[i].first;

while(p) {

if(!visited[p->adjvex])

DFS(G, p->adjvex);

p = p->next;

}

}

//求连通分量

int getNum(ALGraph G) {

int i, count = 0; //记录连通分量个数

for(i = 0; i < G.vexnum; i++)

visited[i] = 0;

for(i = 0; i < G.vexnum; i++)

if(!visited[i]) {

count++;

DFS(G, i);

}

return count;

}

int main() {

ALGraph G;

createALGraph(G);

printf("%d", getNum(G));

return 0;

}

编写算法求无向图的连通分量的个数,求无向图的连通分量相关推荐

  1. 【算法】深度优先搜索遍历的应用 设计算法以求解无向图G的连通分量的个数和无向图G的边数

    应用一 设计算法以求解无向图G的连通分量的个数 图示: 深度遍历基本算法dfs(v0)如下 : void dfs(int v0) { visite(v0); visited[v0]=TRUE;w=fi ...

  2. 用c语言求1 n的素数个数 给出两种解法,【题目】求n以内的素数个数

    最近在leetCode上刷提,还是满锻炼人的,为以后面试打基础吧.不多说下面开始. 问题:求[2,n]之间的素数的个数. 来源:leetCode OJ 提示: Let's start with a i ...

  3. 算法笔记--无向图的桥、割点、边双连通分量和点双连通分量

    概念: 桥:无向图中删去一条边使得图不再联通,则这条边称为桥 割点:无向图中删去一个点使得图不再联通,则这个点称为割点 算法: 运用到tarjan算法 关于tarjan算法: https://www. ...

  4. tarjan算法与无向图的连通性(割点,桥,双连通分量,缩点)

    基本概念 给定无向连通图G = (V, E) 割点: 对于x∈V,从图中删去节点x以及所有与x关联的边之后,G分裂为两个或两个以上不相连的子图,则称x为割点 割边(桥) 若对于e∈E,从图中删去边e之 ...

  5. [算法] 求排列组合: 从n个数中任选m个数组成一个新数

    #include <iostream> #include <vector>using namespace std;// 求排列组合算法: C(n, m): 从n个数中任选m个数 ...

  6. 用java提示用户输入学生个数_编写程序,提示用户输入一个数N,然后显示1~N的所有偶数平方值,求大神看看我写的程序哪里有问题。。...

    点击查看编写程序,提示用户输入一个数N,然后显示1~N的所有偶数平方值,求大神看看我写的程序哪里有问题..具体信息 答: 修改后的程序:#includeint main(){int n,a,b;pri ...

  7. 二进制拆弹实验详解_Population Count算法-求二进制数中1的个数

    所谓Population Count算法,即是指计算一个二进制数中1的个数的算法.具体来说,就是任意给定一个无符号整数N,求N的二进制表示中1的个数,比如N = 5(0101)时,返回2:N = 15 ...

  8. 20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数。

    20.编写函数int fun(int lim,int aa[MAX]),该函数的功能是求出小于或等于lim的所有素数并放在aa数组中,该函数返回所求出的素数的个数. 效果 代码 #include &l ...

  9. 求二进制数中1的个数(转)

    2.1 求二进制数中1的个数 对于一个字节(8bit)的变量,求其二进制表示中"1"的个数,要求算法的执行效率尽可能地高. 分析与解法 大多数的读者都会有这样的反应:这个题目也太简 ...

最新文章

  1. Android studio断开svn连接
  2. Android Realm相关操作
  3. 字符数组、字节数组、字符串转换
  4. loadruner11 socket脚本-10053错误
  5. 分布式Redis的分布式锁 Redlock
  6. freecodecamp_freeCodeCamp.org隐私权政策:问题与解答
  7. trc20地址监听php,Tron/USDT-TRC20对接PHP开发包 - 人人都是架构师
  8. SpringMVC 入门示例讲解
  9. matlab中使用libsvm工具箱训练的svm分类器model保存
  10. 指针变量本质(四十三)
  11. 我的世界服务器修改地图,《我的世界手机版》地图编辑器介绍 怎么修改地图信息...
  12. OpenCV4--->基础函数,与操作
  13. html特效字体在线生成,javascript实现鼠标点击生成文字特效
  14. 【Operator】七大互联网电视牌照商2016年下半年动向之中央三大台
  15. 摄影后期人像高端摄影后期PS修图技巧
  16. pubwin修改服务器时间,如何解决控制台打开(Pubwin)提示服务器没有启动或者服务器IP地址改变问题...
  17. 二度理解Java web中的核心知识
  18. 如何在OUTLOOK签名中自动加入日期
  19. 直角三角形面积Java_利用Eclipse编写第一个简单的Java程序,实现如下功能。 键盘输入:直角三角形两直角边a, b,根据勾股定理计算斜边的平方值。并输出。 例如:运行效果如下...
  20. Canvas--画直线

热门文章

  1. DataFrame(9):DataFrame运算——基本统计函数
  2. Python学习记录 如何使用TensorFlow
  3. 关于数据可视化Chartjs,Highcharts用法
  4. 运动蓝牙耳机哪个品牌好,2022运动蓝牙耳机推荐
  5. 3325. 今天是个特殊的日子
  6. Vue 定时器/定时调用
  7. Jmeter响应断言---变量断言
  8. python小试牛刀:抢手机/抢票神器
  9. Mac小技巧:来使用照片程序制作一个幻灯片吧!
  10. 关于启动tomcatINFO警告错误问题解决