全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总

题目:给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。

输入格式:

输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。

输出格式:

按照"{ v​1​​ v​2​​ ... v​k​​ }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。

输入样例:

8 6
0 7
0 1
2 0
4 1
2 4
3 5

输出样例:

{ 0 1 4 2 7 }
{ 3 5 }
{ 6 }
{ 0 1 2 7 4 }
{ 3 5 }
{ 6 }

解答:

我倾向于用邻接矩阵来实现这个功能,因为反正也不知道一共有多少条边,邻接矩阵反而更直观一些,如果用邻接表就写起来不是很容易。

首先我们先构建一个二维数组用来存连接图,以及一个一维数组用来记录已经访问过的点。

int Graph[11][11];
bool visit[11];

以及三个基础函数,一个用来读入连接生成图,一个初始化,把所有数据初始化为0(虽然全局变量一开始就是0,不过为了保险起见还是初始化一下),一个是用来恢复visit都变为0,用于下一次遍历。

void initGraph(int N);
void recovGraph(int N);
void generateGra(int E);

核心函数为遍历函数:

void ErgDFS(int N);
void ErgBFS(int N);

深度搜索和广度搜索视频里介绍已经非常详细了,这里不再赘述。直接附带上源码:

#include <iostream>
#include <map>
#include <queue>
#include <vector>
#include <string>
using namespace std;
int Graph[11][11];
bool visit[11];
void initGraph(int N);
void recovGraph(int N);
void generateGra(int E);
void ErgDFS(int N);
void ErgBFS(int N);
int main(void) {int N,E;cin >> N >> E;initGraph(N);generateGra(E);ErgDFS( N);recovGraph(N);ErgBFS(N);system("pause");return 0;
}void initGraph(int N) {for (int i = 0;i < N;i++) {visit[i] = 0;for (int j = 0;j < N;j++) {Graph[i][j] = 0;if (i == j) {Graph[i][j] = 1;}} }
}
void recovGraph(int N) {for (int i = 0;i < N;i++) {visit[i] = 0;}
}void generateGra(int E) {for (int i = 0;i < E;i++) {int a, b,tempA,tempB;cin >> a >> b;Graph[a][b] = 1;Graph[b][a] = 1;}
}void DFS(int i,int N)
{   //Graph[i][j].Visit = 1; ////遍历i+1--N-1visit[i] = 1;cout << i << " ";for (int k = 0;k < N;k++) {if (Graph[i][k] == 1 && visit[k] == 0) {visit[k] = 1;DFS(k,N);      }}
}
void ErgDFS(int N) {for (int i = 0;i < N;i++) {if (visit[i] == 0) {cout << "{ ";DFS(i,N);cout << "}"<<endl;}      }
}
queue<int> myQueue;
void BFS(int i, int N)
{visit[i] = 1;myQueue.push(i);while (!myQueue.empty()) {int a = myQueue.front();myQueue.pop();cout << a << " ";for (int j = 0;j < N;j++) {if (Graph[a][j] == 1 && visit[j] == 0) {myQueue.push(j);visit[j] = 1;}}}
}void ErgBFS(int N) {for (int i = 0;i < N;i++) {if (visit[i] == 0) {cout << "{ ";BFS(i, N);cout << "}" << endl;}}
}

测试结果如下:

算法 图1 列出连通集相关推荐

  1. 06-图1 列出连通集 —— 非联通图的DFS与BFS

    06-图1 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的 ...

  2. 7-2 列出连通集 (25分)

    文章目录 7-2 列出连通集 (25分) 输入格式: 输出格式: 输入样例: 输出样例: 题解 伪代码 代码 7-2 列出连通集 (25分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别 ...

  3. 7-6 列出连通集 (25 分)(详解)

    列出连通集 1:思路 : 利用了邻接矩阵储存数据并建图,然后就是 DFS遍历和BFS遍历 只不过是本题需要输出的是非连通图 连通分量 外加俩函数搞定 2:上码 #include<bits/std ...

  4. 06-图1 列出连通集

    06-图1 列出连通集(25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺 ...

  5. 7-5 列出连通集 (6 分)

    7-5 列出连通集 (6 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访 ...

  6. 7-201 列出连通集 (25 分)

    7-201 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的 ...

  7. 7-2 列出连通集 (25 分)

    给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点. 输入格式: 输入第1 ...

  8. 列出连通集(java)

    7-6 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...

  9. linux 树状结构图,linux下tree指令的用法, 树状图列出目录, 树状图逐级列出目录...

    tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装, 安装 sudo apt install tree ...

最新文章

  1. puppet cert maintain
  2. python - 异常处理
  3. 在windows中python安装sit-packages路径位置 在Pycharm中导入opencv不能自动代码补全问题
  4. 观《phonegap第三季 angularjs+ionic视频教程 实时发布》学习笔记(一)
  5. 浅谈群集与分布式基础知识
  6. [转]MyBatis的foreach语句详解
  7. Java web对试卷进行单选多选答题进行打分_2020年大学慕课Java程序设计作业答案...
  8. Linux下ctrl+c,ctrl+z,ctrl+d的区别
  9. Vue3@cli项目结构
  10. ssas ssrs_如何使用SSAS表格模型数据库创建简单的SSRS报告
  11. ImageView.ScaleType 属性值
  12. c店店铺名怎么用旗舰店_大发现!三利和洁丽雅2大国民毛巾品牌也有1688店铺!...
  13. css 绝对定位底部居中,css – 在另一个元素的中心下方水平居中绝对定位元素
  14. 日常学习笔记-RGB配色和颜色转换
  15. Web--用户注册界面
  16. mac php pear pecl,mac 安装 pecl pear
  17. 《老子》古本学习札记
  18. 六下计算机教学总结,六年级下册信息技术教学工作总结
  19. Arduino单片机(二).Arduino系列单片机的介绍
  20. laravel跨域问题

热门文章

  1. esim分布式云卡池技术
  2. 瘟疫之源老鼠详细解读
  3. SVM 之 松弛变量
  4. 你想要拥有自己的搜索引擎吗?
  5. 痞子衡嵌入式:串口调试工具pzh-com诞生记(6)- 打包发布(PyInstaller3.3.1)
  6. 华为相册的神仙功能,真的超好用!
  7. MySQL 3:MySQL数据库基本操作 DQL
  8. 实战:k8s中基于角色的权限访问控制-RBAC(成功测试-博客输出)-20211005
  9. 四、Scala从入门到精通一一循环控制
  10. 智能合约部署Error: exceeds block gas limit undefined