列出连通集——DFS+BFS
来源:互联网 发布:mac 查看音轨 编辑:程序博客网 时间:2024/06/03 17:59
think:
1深度优先搜索体现了递归的思想,广度优先搜索体现了队列的思想
6 列出连通集 (25分)
给定一个有NNN个顶点和EEE条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1N-1N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。
输入格式:
输入第1行给出2个整数NNN(0
测试点1 答案正确 15/15 2 1 sample 两种顺序不同,也有相同,有未出现的单个顶点测试点2 答案正确 8/8 1 1 第1个是单独点,最大N测试点3 答案正确 2/2 18 1 N和E最小
以下为答案正确代码
#include <stdio.h>#include <string.h>int vis[14], e[14][14], link[14], op, tp;void DFS(int x, int n);//深度优先搜索void BFS(int x, int n);//广度优先搜索int main(){ int n, m, u, v, i; while(scanf("%d %d", &n, &m) != EOF) { memset(vis, 0, sizeof(vis));//vis数组初始化(vis数组标记当前结点是否被访问过) memset(e, 0, sizeof(e));//e数组初始化(e数组记录结点之间是否存在路径) for(i = 0; i < m; i++) { scanf("%d %d", &u, &v); e[u][v] = e[v][u] = 1; } for(i = 0; i < n; i++) { if(vis[i] == 0) { printf("{"); DFS(i, n);//深度优先搜索 printf(" }\n"); } } op = tp = 0;//队列标记变量初始化 memset(vis, 0, sizeof(vis));//vis数组初始化(vis数组标记当前结点是否被访问过) for(i = 0; i< n; i++) { if(vis[i] == 0) { printf("{"); BFS(i, n);//广度优先搜索 printf(" }\n"); } } } return 0;}void DFS(int x, int n)//深度优先搜索{ int i; printf(" %d", x); vis[x] = 1; for(i = 0; i < n; i++) { if(vis[i] == 0 && e[x][i] == 1) { DFS(i, n);//深度优先搜索(递归思想) } }}void BFS(int x, int n)//广度优先搜索(队列思想){ int i, f1; link[tp++] = x;//当前结点入队 vis[x] = 1; while(op < tp) { f1 = link[op++];//头结点出队 printf(" %d", f1); for(i = 0; i < n; i++) { if(vis[i] == 0 && e[f1][i] == 1) { vis[i] = 1; link[tp++] = i;//当前结点入队 } } }}
0 0
- 列出连通集——DFS+BFS
- PAT--列出连通集--dfs&bfs
- 列出连通集-----简单dfs+bfs
- 图论BFS DFS 列出连通集
- PTA-列出连通集(DFS+BFS)
- PTA 2-1 列出连通集【DFS+BFS基础】
- 图的基本操作:建立图,DFS,BFS-06-图1 列出连通集
- 数据结构—连通图的遍历—DFS和BFS
- EOJ 1816 判断图连通的三种方法——dfs,bfs,并查集
- pat--列出连通集
- 列出连通集
- 列出连通集
- poj1562 DFS/BFS连通块
- 【算法】图论(一) —— 基本图算法(BFS/DFS/强连通分量)
- 5-6 列出连通集
- 5-6 列出连通集
- 5-6 列出连通集
- 【C/C++】列出连通集
- 安卓学习的资料
- 【教程】用微PE在UEFI+GPT模式下安装WIN7、WIN10
- python做量化交易干货分享
- mysql 设置两个主键
- css一些坑的地方
- 列出连通集——DFS+BFS
- 多帐套,多组织 登录系统设计
- hbase1.3.0学习笔记
- ionic angular 事件点透
- 一个下资料的地方
- 何为版本控制
- 判断整数序列是不是某二叉查找树的后序遍历的结果
- CImg学习入门-图像读入显示与基础处理
- 钉钉机器人自动提醒