问题描述:
无向图,计算图的最大度、最小度和连通分支数。

图的最大度指的是图中所有结点的度的最大值,图的最小度指的是图中所有结点的度的最小值。

输入

第一行是一个整数V,表示图有V个结点,结点编号0, 1, 2, …, V-1。(1<=V<=1万)

第二行是一个整数E,表示图中有E条边。(0<=E<=10万)

接下来有E行,每行表示一条边,用空格分隔的两个整数表示边的两个端点。

请注意选择合适的数据结构。

输出

三行,分别输出图的最大度、最小度和连通分支数。

样例输入

13

13

0 5

4 3

0 1

9 12

6 4

5 4

0 2

11 12

9 10

0 6

7 8

9 11

5 3

样例输出

4

1

3
代码存在部分问题,CG平台8组数据只能通过四组,50分,代码是百度找了个好歹改了改,参考代码下面会跟着给出

#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;/**
加static防止报[Warning] anonymous type with no linkage used to declare variable '<anonymous struct> Node [100000]' with linkage
*/
static struct
{int sonList[10000];int sonNum;int vir;
}Node[10000];int num, nx, ny, branch = 0, countNum = 1, a[10000], line;void BFS(int x)
{queue<int>q;int k0 = x, k1;
//  int flag = 0;Node[k0].vir = 1;q.push(k0);while (!q.empty())//打开注释怎打印所有的连通分支 {k0 = q.front();q.pop();//if (flag)// cout << "-";//flag = 1;//cout << k0;if (Node[k0].sonNum == 0)continue;sort(Node[k0].sonList, Node[k0].sonList + Node[k0].sonNum);for (int i = 0; i <= Node[k0].sonNum; i++){k1 = Node[k0].sonList[i];if (Node[k1].vir == 1)continue;q.push(k1);Node[k1].vir = 1;}}//cout << endl;branch++;
}int main()
{cin >> num;for (int i = 0; i < num; i++){Node[i].sonNum = 0;Node[i].vir = 0;}cin >> line;while (1){cin >> nx;countNum++;//if (nx == -1)//通过-1来结束循环输入 //break;if(countNum >= line*2) break;cin >> ny;countNum++;Node[nx].sonList[Node[nx].sonNum] = ny;Node[nx].sonNum++;Node[ny].sonList[Node[ny].sonNum] = nx;Node[ny].sonNum++;}for (int i = 0; i < num; i++) //注意其他分支树{if (Node[i].vir == 0)BFS(i);}for(int i = 0; i < num ; i++){a[i] = Node[i].sonNum;}sort(a,a+num);cout << a[num-1] <<endl;cout << a[0] <<endl;cout << branch <<endl;return 0;
}

参考代码:
求解无向图的各连通分支
输入:
第一行为图的节点数n(节点编号0至n-1,0< n<=10)
从第二行开始列出图的边,-1表示输入结束
输出:
输出每个连通分支的广度优先搜索序列(从连通分支的最小编号开始),不同分支以最小编号递增顺序列出
sample:
input:
8
0 5
5 2
4 5
5 6
6 2
3 7
0 2
-1
output:
0-5-2-4-6
1
3-7

测试用例
用例1:
输入:
8
0 5
5 2
4 5
5 6
6 2
3 7
-1
输出:
0-5-2-4-6
1
3-7
用例2:
输入:
10
1 2
7 2
8 5
2 8
5 7
6 8
6 5
9 0
0 3
-1
输出:
0-3-9
1-2-7-8-5-6
4
用例3:
输入:
5
0 1
0 2
0 3
0 4
1 2
1 3
1 4
2 3
3 4
-1
输出:
0-1-2-3-4

解析:注意题目描述用的用例有问题,应该按测试用例的输出。对于非连通分支树,就是对节点循环输出即可,输出过的标记一下。

#include<iostream>
#include<string>
#include<queue>
#include<algorithm>
using namespace std;struct
{int sonList[100];int sonNum;int vir;
}Node[100];int num, nx, ny;void BFS(int x)
{queue<int>q;int k0 = x, k1, flag = 0;Node[k0].vir = 1;q.push(k0);while (!q.empty()){k0 = q.front();q.pop();if (flag)cout << "-";flag = 1;cout << k0;if (Node[k0].sonNum == 0)continue;sort(Node[k0].sonList, Node[k0].sonList + Node[k0].sonNum);for (int i = 0; i <= Node[k0].sonNum; i++){k1 = Node[k0].sonList[i];if (Node[k1].vir == 1)continue;q.push(k1);Node[k1].vir = 1;}}cout << endl;
}int main()
{cin >> num;for (int i = 0; i < num; i++){Node[i].sonNum = 0;Node[i].vir = 0;}while (1){cin >> nx;if (nx == -1)break;cin >> ny;Node[nx].sonList[Node[nx].sonNum] = ny;Node[nx].sonNum++;Node[ny].sonList[Node[ny].sonNum] = nx;Node[ny].sonNum++;}for (int i = 0; i < num; i++) //注意其他分支树{if (Node[i].vir == 0)BFS(i);}return 0;
}

离散数学:连通分支数相关推荐

  1. 离散数学 习题篇 —— 图的基本概念——连通分支数

    题目: 计算无向图的连通分支数. 输入格式: 第一行是一个整数V,表示图有V个结点,结点编号0,1,2,-,V−1(1≤V≤10,000) 第二行是一个整数E,表示图中有E条边.(0≤E≤100,00 ...

  2. HDU 4587 TWO NODES(割两个点的最大连通分支数)

    http://acm.hdu.edu.cn/showproblem.php?pid=4587 题意: 给一图,求割去两个点后所能形成的最大连通分支数. 思路: 对于这种情况,第一个只能枚举,然后在删除 ...

  3. 2013吉林通化邀请赛 1004 D-City 并查集求连通分支数

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4496 将题目要查询的数倒过来求,先加一条边,保存cc(连通分支数)  然后再加一条边.... 当合并两 ...

  4. 牛客-计算机复试题-求图的连通分支数

    求图的连通分支数可以用并查集实现. 并查集的讲解推荐: https://blog.csdn.net/liujian20150808/article/details/50848646 本题求的是无向图的 ...

  5. HDU1213HDU1232-求连通分支数

    How Many Tables Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tot ...

  6. 无向图的连通分支数(并查集)

    目录 这是牛客网上题号为 KY268 的一道题 题目描述:该题的目的是要你统计图的连通分支数. 输入描述:每个输入文件包含若干行,每行两个整数 i, j,表示节点 i 和 j 之间存在一条边. 输出描 ...

  7. 图的基本概念-连通分支数

    图的基本概念-连通分支数 在这里插入代码片 // 图的邻接表存储结构,C++ 简化版#include <iostream> #include <vector> using na ...

  8. 求矩阵的连通分支数问题

    有这样一个题目 给出一个mxn的矩阵,矩阵中的元素为0或1,.称位置(x,y)与其上下左右四个位置(x,y+1).(x,y-1).(x+1,y).(x-1,y)是相邻的.如果矩阵中有若干个1是相邻的( ...

  9. DFS求图的连通分支、割点数、判断是否连通

    连通分支数 /*DFS求图的连通分支数 */ #include <stdio.h> #define N 1 //看是否所有顶点都被访问标记过 int IsVisit(int visit[] ...

最新文章

  1. Algs4-2.2.29自然的归并排序(未解决)
  2. Linux环境安装canvas,npm install canvas简明指南
  3. 开发日记 20200129 新年这几天的总结
  4. 高清音质背后:网易云信音乐教学方案技术解密
  5. python显示日历_python显示日期
  6. linux系统硬盘数据恢复软件下载,R-Linux|R-Linux(linux数据恢复软件)下载 v5.1中文免费版 - 121下载站...
  7. MariaDB 在 RedHat Linux 上的安装过程以及 MySQL 相关命令的使用
  8. 谷歌波浪推行受阻 “医疗云”生不逢时
  9. MySQL数据库入门(超详细,多图解)
  10. querydsl动态 sql_SpringDataJPA学习记录(四)--使用QueryDSL
  11. 热血传说复古传奇老显示服务器维护,《复古传奇之热血传说》新系列地图,新的装备即将出现...
  12. vue 二级三级路由配置
  13. DirectX修复工具的详细使用步骤介绍
  14. PHP输出JSON格式数据
  15. 使用钉钉机器人实现运维告警信息自动发送(Python、Nagios、Shell)
  16. bcdedit添加linux引导,强大的BCDEdit工具-启动项等相关问题-设置默认开机启动项
  17. Centos yum安装Mysql
  18. 建模语言UML在软件开发中的应用
  19. 和量子计算有什么区别 并发_超级计算机和量子计算机有什么区别?
  20. Intel系列CPU架构的发展史

热门文章

  1. 主题:含热电联供的智能楼宇群协同能量管理
  2. 说服力——工作型PPT该这样做
  3. android气球上升的属性动画,CSS3 不断有气球上升的动画背景效果
  4. linux多线程求和_Linux下使用两个线程协作完成一个任务的简易实现
  5. 新道电子沙盘系统_新手入坑ERP企业经营沙盘模拟,那些常见的方案你知道多少?...
  6. springboot aop使用_Springboot 完整搭建快速入门,必看!
  7. mysql 2005 下载_sql2005下载完整版 中文免费版
  8. GUI 剖析之 控件篇1)按钮控件
  9. 完美修复google翻译失效的问题
  10. unturned服务器消息设置,unturned服务器设置op