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来确定父节点, ...
随机推荐
- 业务、数据记录——ThreadPool.QueueUserWorkItem及Redis的实现
业务描述 当用户执行完业务操作,或者数据操作后,讲业务记录/数据追踪插入到Redis中.ThreadPool.QueueUserWorkItem定时检查队列并将上述数据插入到数据库中持久化. 实现流程 ...
- 结合jenkins以及PTP平台的性能回归测试
此文已由作者余笑天授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1背景简介 1.1 jenkins Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle ...
- Hadoop 对MapReduce的理解
对MapReduce的理解 客户端启动一个作业 向JobTraker请求一个JobId 将资源文件复制到HDFS上,包括Jar文件,配置文件,输入划分信息等 接收作业后,进入作业队列,根据输入划分信息 ...
- H5 简介
HTML5 - 新特性 HTML5 的一些最有趣的新特性: 新的语义元素,比如 <header>, <footer>, <article>, and <sec ...
- CTO成长之路分享会
1. 李宏玮,纪源资本合伙人GGV,设计无人机,典型的投资: VC做投资,收入利润上市技术团队,架构支撑前沿科技,以后牛逼公司以技术为主 2. 小红书tiger2003加入谷歌,之前学phpgoogl ...
- .txt文件转换到Excel
背景 前几天,自己在实验室里做实验,我们的大偶像肖老师看见我了,把我宣到他的办公室,问我,这个怎么办.都是数字,两列数字,怎么排版到Excel上也显示两列数字.Oh My God! 这个我怎么知 ...
- 洛谷P1607 [USACO09FEB]庙会班车Fair Shuttle
P1607 [USACO09FEB]庙会班车Fair Shuttle 题目描述 Although Farmer John has no problems walking around the fair ...
- Gson本地和服务器环境不同遇到的Date转换问题 Failed to parse date []: Invalid time zone indicator
GoogleGson在处理Date格式时有个小陷阱,在不同环境中部署时可能会遇到问题. Gson默认处理Date对象的序列化/反序列化是通过一个SimpleDateFormat对象来实现的,通过下面的 ...
- SpringBoot2.0 基础案例(04):定时任务和异步任务的使用方式
一.定时任务 1.基本概念 按照指定时间执行的程序. 2.使用场景 数据分析 数据清理 系统服务监控 二.同步和异步 1.基本概念 同步调用 程序按照代码顺序依次执行,每一行程序都必须等待上一行程序执 ...
- SQL语法:MySQL系列之四
一.SQL语言的简介和规范 是一种特定目的程序语言,用于管理关系数据库管理系统(RDBMS),或在关系流数据管理系统(RDSMS)中进行流处理. 20世纪70年代,IBM开发出SQL,用于DB2 ...