<数据结构>无向连通子图个数求解(C语言版)

2023-05-16

求无向图连通子图个数
测试数据由m+1行构成,第一行为两个正整数n(1<n<=30),m(1<m<100),顶点数,边数
m行数据是边的信息,表示该边关联的两个顶点
输出两行信息,第一行连通子图个数,第二行按照升序输出每个连通子图中顶点个数
输入样例
9 8
1 2
1 3
2 4
3 4
5 7
5 6
6 7
8 9
输出样例
3
2 3 4

#include<stdio.h>
#define MAX 35

int Matrix[MAX][MAX];
int vset[MAX] = {0};
int vex[MAX];
int sum, n, m;
int dfs (int x);

int main (void) {
    int i, j, count = 0, u, v, w = 0, t;
    scanf ("%d %d", &n, &m);
    while (m--) {
        scanf ("%d %d", &u, &v);
        Matrix[u][v] = 1;
        Matrix[v][u] = 1;
    }
    /*for (i = 1; i <= n; i++) {
        for (j = 1; j<= n; j++) {
            printf ("%d ", Matrix[i][j]);
        }
        printf ("\n");
    }*/
    /*for (i = 1; i <= n; i++) {
        printf ("%d",vset[i]);
    }*/
    for (i = 1; i <= n; i++) {
        if (vset[i] == 0) {
            dfs (i);
            count++;
        }
    }

    printf ("%d\n", count);

    for (i = 1; i <= n; i++) {
        vset[i] = 0;
    }
    
    /*for (i = 1; i <= n; i++) {
        printf ("%d",vset[i]);
    }*/
    
    for (i = 1; i <= n; i++) {
        if (vset[i] == 0) {
            sum = 1;
            dfs (i);
            vex[w] = sum;
            w++;
            //printf ("%d", sum);
        }
    }

    for (i = 0; i < w; i++) {
        for (j = 0; j < w - 1 - i; j++) {
            if (vex[j] > vex[j + 1]) {
                t = vex[j];
                vex[j] = vex[j + 1];
                vex[j + 1] = t;
            }
        }
    }

    for (i = 0; i < w; i++) {
        printf ("%d ", vex[i]);
    }
    return 0;
}

int dfs (int x) {
    vset[x] = 1;
    int i;
    for (i = 1; i <= n; i++) {
        if (vset[i] == 0 && Matrix[i][x] == 1) {
            sum++;
            dfs (i);
        }
    } 
}

C++可以看这位,连通子图。
每日一感慨C++确实方便hhh,尤其是STL的使用。换到C里要多很多代码。
关于深度优先搜索DFS可以看下《算法笔记》,个人感觉还是挺好理解的。当然理解是一回事,能够代码实现又是一回事,还是要自己多练。
利用这道题记录一下我个人比较欠缺的点吧
1.DFS的代码实现
在不看ppt不看笔记的情况下单对着编辑器敲出来还是有点困难,总是漏掉这个或者那个。最近ddl太多,肝完再来填这个坑吧。
2.全局变量的使用
在知道全局变量占用空间比较大的时候,下意识的就想不到用全局变量,导致很多时候在函数间传递数值的时候,还要思考怎么传,用指针或者多添加一个形参,在DFS这种递归的条件下,多一个指针也好,多一个参数也好,都很占用空间,还不如一个全局变量,上一个函数修改完,下一个函数能够直接使用这个数值。在当前这个数据量的情况下,全局变量也占用不了太多空间。
3.数组下标的使用
利用数组下标标记是否访问过该元素。(当元素内容是abc时,可利用a-'a’将其转化为数字来标记。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

<数据结构>无向连通子图个数求解(C语言版) 的相关文章

  • 【Android ViewBinding】内存泄露

    场景 在MainActivity中分别加载两个Fragment处理业务 首先触发加载SecondFragment xff1a MainActivity触发 supportFragmentManager commit add R id con
  • Shell小脚本实现一键关机/重启虚拟机

    利用Shell脚本实现一键关机 重启虚拟机 xff0c 解决每次虚拟机关机或重启都需要手动一个个关机或重启的烦恼 xff01 1 脚本一 xff1a shut sh span class token comment bin bash spa
  • LAMP环境搭建

    前言 一 在虚拟机上安装Linux系统 二 安装Apache 1 下载好后 xff0c 看了看版本 xff0c 不是太老 xff0c 就没有继续安装 2 开启Apache服务 3 设置Apache开机启动服务 4 尝试一下是否启动了服务 x
  • 小程序跳坑之安卓真机不能访问服务器的问题

    因为一项目 xff0c 有几个页面都需要访问服务器 xff0c 从服务器上下载数据 xff0c 在苹果和开发者工具上都运行完美 xff0c 唯独一款安卓手机 xff0c 访问不了 xff0c 经测试 xff0c 发现是汉字编码问题 xff0
  • python Tkinter 界面button调用多进程函数,弹出多个相同界面

    这是我的界面button command的函数start simulate 这是我的多进程函数 xff1a 点击之后 xff0c 弹出多个相同界面 把调用多进程的函数在 if name 61 61 39 main 39 这里调用就不会出现多
  • python入门之if-else语句

    文章目录 一 if语句二 elif语句三 if嵌套语句四 else语句1五 else语句2六 if else语句举例1七 if else语句举例2 一 if语句 span class token keyword if span False
  • Ubuntu 16.04 远程桌面

    1 安装xrdp sudo apt get install xrdp 2 安装vnc4server 我这里是安装xrdp的时候自动安装的 我看网上很多说是需要单独安装的 3 安装xfce4 sudo apt get install xubu
  • GitLab端口冲突 解决办法

    访问gitlab xff0c 出现 xff1a 502 GitLab在使用的过程中 xff0c 会开启80端口 xff0c 如果80端口被其他的应用程序占用 xff0c 则GitLab的该项服务不能使用 xff0c 所以访问GitLab会失
  • Android开发 之 确认凭证

    确认凭证 主要目的 xff1a 设置不用验证时间 设置为30秒 xff0c 当超过30秒后则需要重新验证身份才能操作 您的应用可以根据用户在多久之前最后一次解锁设备来验证其身份 此功能让用户不必费心记忆应用特定密码 xff0c 您也无需实现
  • inner join、outer join、right join、left join 之间的区别

    inner join outer join right join left join 之间的区别 一 sql的left join right join inner join之间的区别 left join 左联接 返回包括左表中的所有记录和右
  • "大泥球"仍然是最常见的软件设计

    大泥球 xff0c 是指杂乱无章 错综复杂 邋遢不堪 随意拼贴的大堆代码 这些年来 xff0c 为了对付这个泥球 xff0c 我们看到了多种指导方法 xff0c 比如SOLID GRASP 和KISS xff0c 与其他诸多年代久远的 提倡
  • 3322.org带来的麻烦

    大概是3322 org被短时间攻破 xff0c 下载他的动态域名客户端的时候下到一个病毒Trojandropper js adagent gd xff0c 把江民关了 xff0c 并且再也开不开 系统还原不行 xff0c 安全模式也进不去
  • Qt学习笔记:多线程的使用

    文章目录 前言1 何时使用线程2 QThread类实现多线程2 1 多线程的实现方法2 2 线程休眠2 3 正确结束线程 3 线程同步3 1 互斥量3 2 信号量3 3 条件变量 4 线程池参考资料 前言 程序中调用耗时的操作 xff08
  • 上位机开发笔记:环形缓冲区

    文章目录 前言1 环形缓冲区工作机制1 1 实现原理1 2 区分缓冲区满或者空1 总是保持一个存储单元为空2 使用计数数据3 镜像指示位 2 Qt实现环形缓冲区2 1 QByteArray环形缓冲区2 2 QSemaphore实现环形缓冲区
  • IDEA搭建Spring框架环境

    IDEA搭建Spring框架环境 一 spring 框架概念 spring 是众多开源 java 项目中的一员 xff0c 基于分层的 javaEE 应用一站式轻量 级开源框架 xff0c 主要核心是 Ioc 控制反转 依赖注入 与 Aop
  • SQL SERVER中索引类型包括的三种类型分别是

    xfeff xfeff 唯一索引 UNIQUE 聚集索引 CLUSTERED xff09 非聚集索引 NONCLUSTERED xff09 主键与唯一索引的区别 主键是一种约束 xff0c 唯一索引是一种索引 xff0c 两者在本质上是不同
  • _Linux多线程--生产者消费者模型篇

    文章目录 1 为何要使用生产者消费者模型2 基于BlockingQueue的生产者消费者模型3 C 43 43 queue模拟阻塞队列的生产消费模型条件变量使用规范简单测试1 BlockQueue 缓存 超市 2 ConProd cc3 结
  • HTTP、TCP的关系及状态码

    一 基本概念 1 TCP连接 手机能够使用联网功能是因为手机底层实现了TCP IP协议 xff0c 可以使手机终端通过无线网络建立TCP连接 TCP协议可以对上层网络提供接口 xff0c 使上层网络数据的传输建立在 无差别 的网络之上 建立
  • x299平台装linux系统的一些天坑

    年前实验室为了配置大内存的服务器 xff0c 受限于经费 xff0c 我们只能使用比较便宜的游戏板 xff0c 选择了微星的x299平台 xff0c 买回来自带win10 xff0c 回来的第一件事就是装linux xff0c 习惯上我会装
  • android的应用包名与代码包名

    说来惭愧 xff0c 好歹还是做了android应用这么久了 xff0c 居然不知道这个事情 参考 xff1a http www xmumu com post 2013 08 05 40052300660 http blog javia o

随机推荐

  • [自动驾驶]Build a Traffic Sign Recognition Program

    看 准确率98 的深度学习交通标志识别是如何做到的 xff1f 这篇文章的时候 xff0c 发现了udacity的自动驾驶课程 可惜要收费 xff0c 不过课程project在github上有 xff0c 那直接做project就好了 xf
  • Spring MVC框架的高级配置

    本文将为您提供关于Spring MVC框架的配置技巧 xff0c 以帮助管理基于Spring的web应用程序的多个实例 本配置管理主题常被学术界所忽略 xff0c 但是 xff0c 这对于现实的web开发尤为重要 本主题并不直接关联任何具体
  • ffmpeg解码花屏

    问题 xff1a 解码为YUV420转为Bitmap后显示在屏幕上时 xff0c 有三分之二为花屏 xff1a 如图 xff1a 首先用h264Visa分析帧 xff1a 已经读出了sps等信息 xff0c 这些信在解码第一帧时被写入环境变
  • 使用Hexo+Github一步步搭建属于自己的博客(基础)

    前言 xff1a 电脑系统为window 10专业版 xff0c 64位 相关步骤 xff1a 1 安装Node js和配置好Node js环境 xff0c 打开cmd命令行 xff0c 成功界面如下 2 安装Git和配置好Git环境 xf
  • OpenSSL命令学习

    OpenSSL命令学习 一 基础概念 OpenSSL是一个开放源代码的软件库包 xff0c 应用程序可以使用这个包来进行安全通信 xff0c 避免窃听 xff0c 同时确认另一端连接者的身份 这个包广泛被应用在互联网的网页服务器上 下面以问
  • 论文阅读——Shadow Attacks:Hiding and Replacing Content in Signed PDFS

    论文阅读报告 Shadow Attacks xff1a Hiding and Replacing Content in Signed PDFS 阅读背景 本次阅读的论文是由Christian Mainka Vladislav Mladeno
  • SecKill——一款超级好用的抢单软件

    软件介绍 下载地址见文章末尾 Seckill是一款使用Python和pyqt编写 xff0c 利用selenium库实现的自动化抢单软件 xff0c 它界面友好 xff0c 使用方便 xff0c 可以帮助你在购物时快人一步 xff0c 及时
  • 获取PowerShell的所有历史记录

    PowerShell默认的history命令只能查看当前窗口的历史记录 xff0c 很不方便 可以使用以下方法获取PowerShell的所有历史记录 xff0c 简单记录一下 一 PSReadline 当前版本 xff08 5 1 xff0
  • 用pyqt5写一个同步文件夹内容的小工具

    详见https github com distiny cool File Synchronization 完整代码在最下面 同步文件夹内容的小工具 点这里直接下载可执行程序 出发点 打算把电脑上的文件备份到外部磁盘上面 xff0c 但是原来
  • 博客园添加GitHub链接

    添加该样式涉及到博客园后台页面定制CSS代码和页首Html代码两处改动 1 将下列CSS代码添加至页面定制CSS代码处 1 GitHub Cornor 2 github corner hover octo arm 3 animation o
  • SQL-修改表名,列名

    sql 1 sql server修改表名 列名 修改表名 xff1a EXEC sp rename 原有表名 39 新表名 39 修改列名 xff1a EXEC sp rename 表名 原有列名 新列名 39 39 COLUMN 39 如
  • 程序员你为什么迷茫?

    你曾经充满热情 xff0c 是一位开源软件倡导者 xff0c 你崇尚全栈工程师才有未来的理念 xff0c 你渴望改变世界 但是现在你每天都处于焦虑之中 xff0c 你每天不断地学习各种技术Kotlin Swift React Native
  • Dataset之COCO数据集:COCO数据集的简介、下载、使用方法之详细攻略

    COCO数据集的简介 MS COCO的全称是Microsoft Common Objects in Context xff0c 起源于微软于2014年出资标注的Microsoft COCO数据集 xff0c 与ImageNet竞赛一样 xf
  • 类之间的组合关系

    继承加复合 这种情况下的构造顺序是 xff1a 先调用Base的默认构造函数 xff0c 再调用Component的构造函数 xff0c 最后调用自己的构造函数 析构的顺序与之相反 xff0c 先调用自己析构函数 xff0c 再调用Comp
  • maven pom.xml 详解(注释版)

    转自 xff1a http mrlee23 iteye com blog 1806412 pom xml Xml代码 lt project xmlns 61 34 http maven apache org POM 4 0 0 34 xml
  • 当用户支付成功,微信服务器与我们服务器中间网络断开时处理方案

    用户支付成功了 xff0c 但是微信服务器与我们服务器的网络中断了 这个时候 xff0c 我们的回调数据是没办法处理的 xff0c 这个时间的解决方案 可以有 xff1a 1 有支付脏表进行字段order status之类的进行区分哪些是没
  • java多线程设置超时时间

    情景 xff1a 多线程中个别线程执行时间会很长 xff0c 如果线程执行时间超过某段时间 xff0c 自动结束该线程 百度了很多答案之后大部分的解决办法都是利用Future类中的get long timeout TimeUnit unit
  • Android Studio安装Kotlin插件

    1 Kotlin语言介绍 Kotlin 是 JetBrains 在 2010 年推出的基于 JVM 的新编程语言 xff0c 是一种新的静态类型编程语言 开发者称 xff0c 设计它的目的是避免 Java 语言编程中的一些难题 比如 xff
  • VMware虚拟机教程

    什么样配置的电脑适合建立虚拟机 xff1f 当硬件配置达不到要求时 xff0c 虚拟机运行速度会很慢 xff0c 甚至不能运行 xff0c VMware的配置要求如下 CPU 最低主频266MB xff0c 建议P3 1GHz以上 xff1
  • <数据结构>无向连通子图个数求解(C语言版)

    求无向图连通子图个数 测试数据由m 43 1行构成 xff0c 第一行为两个正整数n 1 lt n lt 61 30 xff0c m 1 lt m lt 100 xff0c 顶点数 xff0c 边数 m行数据是边的信息 xff0c 表示该边