pta 编程题15 列出连通集
其它pta数据结构编程题请参见:pta
题目要求分别以深度优先搜索和广度优先搜索输出图的连通集。
广度优先搜索要用到队列,先回顾一下循环队列:
struct QNode {
int* Data; /* 存储元素的数组 */
int Front, Rear; /* 队列的头、尾指针 */
int MaxSize; /* 队列最大容量 */
};
typedef struct QNode *Queue;
Queue CreateQueue( int MaxSize )
{
Queue Q = new QNode;
Q->Data = new int[MaxSize];
Q->Front = Q->Rear = ;
Q->MaxSize = MaxSize;
return Q;
}
bool IsFull( Queue Q )
{
return ((Q->Rear+)%Q->MaxSize == Q->Front);
}
void enQueue( Queue Q, ElementType X )
{
Q->Rear = (Q->Rear+)%Q->MaxSize;
Q->Data[Q->Rear] = X;
}
bool IsEmpty( Queue Q )
{
return (Q->Front == Q->Rear);
}
int deQueue( Queue Q )
{
Q->Front =(Q->Front+)%Q->MaxSize;
return Q->Data[Q->Front];
}
注意广度优先搜索BFS要在一个顶点入队的时候将其标记,而不是出队的时候。
另外c++全局变量会默认初始化。
还有形参要加上引用符号,否则改变不了实参的值。
#include <iostream>
using namespace std; struct Queue
{
int data[];
int head = ;
int tail = ;
}; int G[][]; //全局变量已
bool marked[], marked2[]; //默认初始化
void buildGraph(int E);
void dfs(int s);
void bfs(int s); void enQueue(Queue& q, int a);
int deQueue(Queue& q);
bool isEmpty(Queue q); int main()
{
int N, E, i;
cin >> N >> E;
buildGraph(E);
for (i = ; i < N; i++)
{
if (!marked[i])
{
cout << "{";
dfs(i);
cout << " }" << endl;
}
}
for (i = ; i < N; i++)
if (!marked2[i])
bfs(i);
return ;
} void buildGraph(int E)
{
int v1, v2, i;
for (i = ; i < E; i++)
{
cin >> v1 >> v2;
G[v1][v2] = ;
G[v2][v1] = ;
}
} void dfs(int s)
{
cout << " " << s;
marked[s] = true;
for (int i = ; i < ; i++)
{
if (G[s][i] && !marked[i])
dfs(i);
}
} void bfs(int s)
{
int t, i;
Queue q;
enQueue(q, s);
marked2[s] = true;
cout << "{";
while (!isEmpty(q))
{
t = deQueue(q);
cout << " " << t;
for (i = ; i < ; i++)
{
if (G[t][i] && !marked2[i])
{
enQueue(q, i);
marked2[i] = true;
}
}
}
cout << " }" << endl;
} void enQueue(Queue& q, int a)
{
q.tail = (q.tail + ) % ;
q.data[q.tail] = a;
} int deQueue(Queue& q)
{
q.head = (q.head + ) % ;
return q.data[q.head];
} bool isEmpty(Queue q)
{
return q.head == q.tail;
}
pta 编程题15 列出连通集的更多相关文章
- pta编程题19 Saving James Bond 2
其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...
- pta 编程题20 旅游规划
其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可. #include <iostre ...
- pta 编程题21 公路村村通
其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...
- pta 编程题16 Saving James Bond - Easy Version
其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...
- pta 编程题14 Huffman Codes
其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...
- pta 编程题13 File Transfer
其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量 ...
- pta 编程题12 堆中的路径
其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...
- pta 编程题10 Root of AVL Tree
其它pta数据结构编程题请参见:pta 这道题考察平衡二叉查找树的插入. 为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整. 分为以下四种情况: 插入新节点后,以及旋转之后, ...
- pta 编程题8 Tree Traversals Again
其它pta数据结构编程题请参见:pta 这次的作业考察的是树的遍历. 题目的输入通过栈的pop给出了树的中序遍历的顺序.根据push和pop的顺序构造树的方法为:定义一个变量father来确定父节点, ...
随机推荐
- Cocos creator之javascript闭包
.什么是闭包? 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.闭包的特点: 1. 作为一个函数变量的一个引用,当函数返回 ...
- [Win10] 安装虚拟光驱 用于加载ISO等镜像文件
百度上找到UltraISO安装 一般来说安装到这就基本会显示一个 若经过上述步骤仍没出现虚拟光驱,则尝试进行加载ISO镜像文件到虚拟光驱然后再看看 这样基本就大功告成了~
- vimtutor总结
$vimtutor ================================================================================ W e l c o ...
- FFT求卷积(多项式乘法)
FFT求卷积(多项式乘法) 卷积 如果有两个无限序列a和b,那么它们卷积的结果是:\(y_n=\sum_{i=-\infty}^\infty a_ib_{n-i}\).如果a和b是有限序列,a最低的项 ...
- 我的省选 Day -10
Day -10 今天的分数也许会比昨天更低.. 感觉2017年比远古时代的2007年的第一试难诶. 估个分数好了,我猜88分(为什么猜了一个这么吉利的数字??到时候出来没几分就啪啪啪打脸了) 和昨天一 ...
- P1072 HanksonHankson 的趣味题
题意:给定$a_0,a_1,b_0,b_1$ 问有多少x满足1:$gcd(x,a_0)=a_1$ 2:$lcm(x,b_0)=b_1$ 思路:暴力枚举(当然不是死枚举) 枚举$a_1$的倍数,判断.. ...
- POJ1845 Sumdiv 数学?逆元?
当初写过一篇分治的 题意:求A^B的所有因子之和,并对其取模 9901再输出 对于数A=p1^c1+p2^c2+...+pn*cn,它的所有约数之和为(1+p1+p1^2+p1^3+...+p1^(c ...
- 我在B站学习 清华大学教授带你学习c++(进阶)类与对象
B站av11459203的一系列视频,跳过了基础篇直接进入进阶,从此难度开始加大.这里做出一些笔记分享一下. 我是1.25速度看的..对应分P 34-36 对象:现实中对象的模拟,具有属性和行为,对象 ...
- HIVE获取表的大小和修改日期
### 获取表的大小 hdfs dfs -du /user/hive/warehouse/database_name.db/ > 360_du ### 获取表的修改日期 hdfs dfs -ls ...
- Linux重新挂载磁盘
Linux下磁盘和目录的概念与WIN不同:比如,分了一个系统分区默认挂载了根(/)目录,根下还有其它目录,比如/user /lib等.如果系统分区不够用,可以再分出分支,把根下其它目录分别挂载出来,例 ...