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来确定父节点, ...
随机推荐
- python测试模块-pytest介绍
1.pytest介绍 pytest是python的一种单元测试框架,与python自带的unittest测试框架类似,但是比unittest框架使用起来更简洁,效率更高. 它具有如下特点: •非常容易 ...
- D. Beautiful Array
题目:http://codeforces.com/contest/1155/problem/D 给你n,x,一个n个数的序列,你可以选择一段区间,区间的数都乘以x,然后求出最大字段和 竟然是很简单的d ...
- [poj 1837] Balance dp
Description Gigel has a strange "balance" and he wants to poise it. Actually, the device i ...
- jq写的上拉刷新
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python之02数据类型学习-作业练习2
引用博客地址:http://www.cnblogs.com/yuanchenqi/articles/5782764.html 作业描述: 省 市 县的三层数据通过字典 元祖 列表 保存起来执行程序后 ...
- 安居客scrapy房产信息爬取到数据可视化(上)-scrapy爬虫
出发点 想做一个地图热力图,发现安居客房产数据有我要的特性.emmm,那就尝试一次好了~ 老规矩,从爬虫,从拿到数据开始... scrapy的配置 创建一个项目(在命令行下敲~): scrapy st ...
- LDAP相关操作注意事项
lc.Modify(entry.DN, new LdapModification(LdapModification.REPLACE, new LdapAttribute("mDBUseDef ...
- Luogu P5103 「JOI 2016 Final」断层 树状数组or线段树+脑子
太神仙了这题... 原来的地面上升,可以倒着操作(时光倒流),转化为地面沉降,最后的答案就是每个点的深度. 下面的1,2操作均定义为向下沉降(与原题意的变换相反): 首先这个题目只会操作前缀和后缀,并 ...
- Luogu P2391 白雪皑皑 && BZOJ 2054: 疯狂的馒头 并查集
4月的时候在luogu上做过 白雪皑皑 这道题,当时一遍AC可高兴了qwq,后来去了个厕所,路上忽然发现自己的做法是错的qwq...然后就咕咕了qwq 今天看到了 疯狂的馒头 ,发现一毛一样OvO.. ...
- HDU6438:Buy and Resell(贪心+数据结构)
题意 : 给出一些数.你可以从左到右对这些数进行三种操作花费 Ai 买入东西.以 Ai 价格卖出你当前有的东西.或者什么都不做.现在问你可以获取的最大利益是多少 分析:对每一个元素产生的贡献可以先计算 ...