数据结构与算法A实验六图论---7-1 列出连通集(BFS DFS)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。
输入格式:
输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。
输出格式:
按照"{ v1 v2 ... vk }"的格式,每行输出一个连通集。先输出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 }
结尾无空行
c++
#include<bits/stdc++.h>
using namespace std;queue<int>q;
int G[11][11];
int vis[11] = { 0 };
int n, m;void DFS(int r) {cout << " " << r;vis[r] = 1;for (int i = 0; i < n; i++) {if (vis[i] == 0 && G[r][i] == 1) {DFS(i);}}
}void BFS(int r) {if (vis[r] == 0)q.push(r);vis[r] = 1;for (int i = 0; i < n; i++) {if (vis[i] == 0 && G[r][i] == 1) {q.push(i);vis[i] = 1;}}while (!q.empty()) {int l = q.front();cout << " " << l;q.pop();BFS(l);}
}int main()
{int a, b;cin >> n >> m;for (int i = 0; i < m; i++) {cin >> a >> b;G[a][b] = G[b][a] = 1;}for (int i = 0; i < n; i++) {if (vis[i] == 0) {cout << "{";DFS(i);cout << " }" << endl;}}memset(vis, 0, sizeof(vis));for (int i = 0; i < n; i++) {if (vis[i] == 0) {cout << "{";BFS(i);cout << " }" << endl;}}return 0;
}
c语言
#include<stdio.h>
#include<string.h>
int visit[100]={0};
int G[100][100];
void DFS(int i,int n);
void BFS(int i,int n);int main(void) {int n,i,m,a,b;scanf ("%d %d",&n,&m);for (i=0;i<m;i++) {scanf ("%d %d",&a,&b);G[a][b]=G[b][a]=1;}for (i=0;i<n;i++) {if (visit[i]==0) {printf ("{");DFS(i,n);printf (" }\n");}}for (i=0;i<n;i++) {visit[i]=0;}//visit[100]={0};for (i=0;i<n;i++) {if (visit[i]==0) {printf ("{");BFS(i,n);printf (" }\n");}}return 0;
}
void DFS(int i,int n) {int j;printf (" %d",i);visit[i]=1;for (j=0;j<n;j++) {if(visit[j]==0&&G[i][j]==1) {DFS(j,n);}}
}
void BFS(int i,int n) {int a[100],j,x=-1,y=-1,last=0,v;visit[i]=1;a[++x]=i;while(1) {if (x==y) break;v=a[++y];printf (" %d",v);for (j=0;j<n;j++) {if (visit[j]==0&&G[v][j]==1) {a[++x]=j;visit[j]=1;}}}
}
数据结构与算法A实验六图论---7-1 列出连通集(BFS DFS)相关推荐
- 数据结构与算法A实验六图论(C语言参考代码)
7-1 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...
- 数据结构与算法A实验六图论---7-11 邻接表创建无向图
采用邻接表创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一个字符表 ...
- 数据结构与算法A实验六图论---7-5 任务调度的合理性(拓扑排序)
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行."任务调度"包括一组子任务.以及每个子任务可以执行所依赖的子任务集. 比如完 ...
- 数据结构与算法A实验六图论---7-6 家庭房产(并查集)
给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 ...
- 数据结构与算法A实验六图论---7-9 最短路径(并查集Dijkstra)
给定一个有N个顶点和E条边的无向图,顶点从0到N−1编号.请判断给定的两个顶点之间是否有路径存在.如果存在,给出最短路径长度. 这里定义顶点到自身的最短路径长度为0. 进行搜索时,假设我们总是从编号最 ...
- 数据结构与算法A实验六图论---7-4 公路村村通(最小生成树Prime和Kruskal算法)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N) ...
- 数据结构与算法A实验六图论---7-10 邻接矩阵表示法创建无向图
采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一 ...
- 数据结构与算法A实验六图论---7-2 哈利·波特的考试(Flody算法)
哈利·波特要考试了,他需要你的帮助.这门课学的是用魔咒将一种动物变成另一种动物的本事.例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等.反方向变化的魔咒就是简单地将原来的魔咒倒过来念 ...
- 数据结构与算法A实验六图论---7-12 Dijkstra算法(模板)
给一个n(1 ≤ n ≤ 2500) 个点 m(1 ≤ m ≤ 6200) 条边的无向图,求 s 到 t 的最短路. 输入格式: 第一行四个由空格隔开的整数 n.m.s.t. 之后的 m 行,每行三个 ...
- 数据结构与算法A实验六图论---7-7 最短工期 (拓扑排序)
一个项目由若干个任务组成,任务之间有先后依赖顺序.项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务.现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工 ...
最新文章
- Pycharm搜索文件名、符号名
- 微软称电脑系统识别能力已经超越了人类
- 【推荐系统入门】一窥推荐系统的原理
- Microsoft My Phone试用手记
- Apollo快速使用
- 密码机项目安装软件时候出现的问题以及对应的解决办法
- Go语言的变量、函数、Socks5代理服务器
- lightgbm algorithm case of kaggle(上)
- 安川机器人仿真软件安装
- 百科知识 画法几何创造性思维训练
- Android系统关于音量相关的控制-初识
- 手机号码相关信息整理
- Problem F: Matrix Problem (III) : Array Practice Time Limit: 1 Sec Memory Limit: 4 MB Submit: 8787
- 【笔记本维修】【基础知识】【二极管 三极管】
- 请记住这个数字-2147483648到2147483647
- 完全免费最好的在线pdf转word转换
- Linux怎么导出inx格式文件,inx文件扩展名,inx文件怎么打开?
- 带adam优化器版本的神经网络
- 笔记:python中的蜘蛛图
- 如何快速合并PDF文件?