其它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 列出连通集的更多相关文章

  1. pta编程题19 Saving James Bond 2

    其它pta数据结构编程题请参见:pta 题目 和简单版本不同的是,简单版本只需判断能否到达岸边,而这个版本要求求出最少跳数的路径. 简单版本用dfs实现,而这道题用BFS实现. 注意: 岛半径为7.5 ...

  2. pta 编程题20 旅游规划

    其它pta数据结构编程题请参见:pta 题目 这个最短路径问题只需要求两点之间的最短路径,因而在Dijikstra算法中当求出目标点的最短路径之后跳出循环即可. #include <iostre ...

  3. pta 编程题21 公路村村通

    其它pta数据结构编程题请参见:pta 题目 这道题考察最小生成树问题,用的是Prim算法. 和Dijkstra算法相比,没有了collect数组,因为dist[v] == 0就代表v被已收录. #i ...

  4. pta 编程题16 Saving James Bond - Easy Version

    其它pta数据结构编程题请参见:pta 题目 主要用到了深度优先搜索. #include <iostream> using namespace std; struct Vertex { i ...

  5. pta 编程题14 Huffman Codes

    其它pta数据结构编程题请参见:pta 题目 题目给出一组字母和每个字母的频数,因为哈夫曼编码不唯一,然后给出几组编码,因为哈夫曼编码不唯一,所以让你判断这些编码是否符合是哈夫曼编码的一种. 解题思路 ...

  6. pta 编程题13 File Transfer

    其它pta数据结构编程题请参见:pta 这道题考察的是union-find并查集. 开始把数组中每个元素初始化为-1,代表没有父节点.为了使树更加平衡,可以让每一个连通分量的树根的负值代表这个连通分量 ...

  7. pta 编程题12 堆中的路径

    其它pta数据结构编程题请参见:pta 这道题考察的是最小堆. 堆是一个完全二叉树,因此可用数组表示,一个下标为 i 的结点的父节点下标为 i / 2,子结点下标为 2i 和 2i + 1. 插入元素 ...

  8. pta 编程题10 Root of AVL Tree

    其它pta数据结构编程题请参见:pta 这道题考察平衡二叉查找树的插入. 为了保证二叉查找树的平衡,当一个结点的左右子树的高度差大于1时就要进行调整. 分为以下四种情况: 插入新节点后,以及旋转之后, ...

  9. pta 编程题8 Tree Traversals Again

    其它pta数据结构编程题请参见:pta 这次的作业考察的是树的遍历. 题目的输入通过栈的pop给出了树的中序遍历的顺序.根据push和pop的顺序构造树的方法为:定义一个变量father来确定父节点, ...

随机推荐

  1. Java面向对象的三大特性 继承

    继承是类与类的一种关系,是“is a"关系  子类拥有父类的属性和方法,private除外 class 子类 extends 父类   方法的重写 调用方法时会优先调用子类的方法 重写时,返 ...

  2. JavaScript -- 实现密码加密的几种方案

    base64加密 页面中引入base64.js var base=new Base64(); var str=base.encode('admin:admin'); //解密用: str=b.deco ...

  3. 对于多线程程序,单核cpu与多核cpu是怎么工作的

    此文中的大部分资料来自于网络上,我只是觉得把有道理的整理一下,方便以后查阅. 1.多线程在单核和多核CPU上的执行效率问题的讨论a1: 多线程在单cpu中其实也是顺序执行的,不过系统可以帮你切换那个执 ...

  4. Spark 中的 RPC 的几个类

    Spark 中 RPC 部分的涉及了几个类,有点晕,在此记录一下 1. RpcEndpoint: RPC的一个端点.给定了相应消息的触发函数.保证  `onStart`, `receive` and ...

  5. Cogs 6. 线型网络

    6. 线型网络 ★★☆   输入文件:linec.in   输出文件:linec.out   简单对比时间限制:1 s   内存限制:256 MB [问题描述] 有 N(N<=20)台 PC 放 ...

  6. nginx丢弃http包体处理

    http框架丢弃http请求包体和上一篇文章http框架接收包体, 都是由http框架提供的两个方法,供http各个模块调用,从而决定对包体做什么处理.是选择丢弃还是接收,都是由模块决定的.例如静态资 ...

  7. 如何简单的理解TDD与DDT

    TDD:TEST-DRIVEN Development 测试驱动开发究竟是什么意思?如何理解测试驱动开发? 举个红绿条简单的例子: 1.编写测试代码 2.编译运行测试代码,肯定会失败,因为实现代码还没 ...

  8. PHPExcel探索之旅---阶段二 设置表格样式

    1.设置表格的默认样式为水平居中.垂直居中 getDefaultStyle()函数用来设置默认样式 由活动sheet对象来调用,setVertical()函数和setHorizontal()函数分别用 ...

  9. C# Repeater 嵌套

    <table class="table table-bordered table-fixed"> <thead> <tr> <th wid ...

  10. springBoot实现socketio

    https://github.com/mrniko/netty-socketio-demo https://github.com/mrniko/netty-socketio