热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第八届蓝桥杯真题c语言c组答案,发现环——第八届蓝桥杯C语言B组(国赛)第四题...

原创标题:发现环小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上ÿ

原创

标题:发现环

小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台

电脑之间有唯一的路径相连。

不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两

两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。

为了恢复正常传输。小明需要找到所有在环路上的电脑,你能帮助他吗?

输入

-----

第一行包含一个整数N。

以下N行每行两个整数a和b,表示a和b之间有一条数据链接相连。

对于30%的数据&#xff0c;1 <&#61; N <&#61; 1000

对于100%的数据, 1 <&#61; N <&#61; 100000&#xff0c; 1 <&#61; a, b <&#61; N

输入保证合法。

输出

----

按从小到大的顺序输出在环路上的电脑的编号&#xff0c;中间由一个空格分隔。

样例输入&#xff1a;

5

1 2

3 1

2 4

2 5

5 3

样例输出&#xff1a;

1 2 3 5

资源约定&#xff1a;

峰值内存消耗 <256M

CPU消耗 <1000ms

请严格按要求输出&#xff0c;不要画蛇添足地打印类似&#xff1a;“请您输入...” 的多余内容。

所有代码放在同一个源文件中&#xff0c;调试通过后&#xff0c;拷贝提交该源码。

注意: main函数需要返回0

注意: 只使用ANSI C/ANSI C&#43;&#43; 标准&#xff0c;不要调用依赖于编译环境或操作系统的特殊函数。

注意: 所有依赖的函数必须明确地在源文件中 #include &#xff0c; 不能通过工程设置而省略常用头文件。

提交时&#xff0c;注意选择所期望的编译器类型。

本人解题思路&#xff1a;

主要还是要用到 DFS &#xff1b;目的是在一棵树中&#xff0c;找到一个环路&#xff1b;假定选择在环路中的A结点作为环路的起点&#xff0c;则A结点也可以作为环

路的终点&#xff0c;由于不知哪个结点在环路中&#xff0c;要依次枚举结点 1~N&#xff1b;

ff29e70bd8bdc97c9ecb85e32871a954.gif

假设用户输入的数据为&#xff1a;

1 2 (0)

1 3 (0)

2 4 (0)

2 5 (0)

5 6 (0)

5 7 (0)

6 7 (0)

第三列的(0/1/-1)数码的意义&#xff1a;

0 &#xff1a;此边未遍历

-1&#xff1a;此边经判断不在环上

1&#xff1a;此边在环上

在上图中&#xff0c;5-6-7组成环&#xff0c;现在从结点1(以结点1为起点和终点)开始遍历每条边(边的遍历顺序与用户输入的边的顺序有关)&#xff1b;

在遍历过程中只有回到起点时&#xff0c;遍历结束。

搜索用户输入的N行数据&#xff0c;找到有数码1的某行(例子中为第1行)&#xff0c;先将此行第三列的数码置1(代表遍历过)&#xff0c;再以此行的另

一个结点(例子中为2)为起点&#xff0c;搜索N行数据中数码位为0的行数据(1代表遍历过)&#xff0c;停留在第三行&#xff0c;将第三列数码位置1&#xff0c;再

以4为起点继续搜索&#xff0c;此时4为叶子结点&#xff0c;搜索数据未果&#xff0c;所以递归回来将 2 4 (1)——> 2 4 (-1)表示此边定不在环中&#xff1b;此时

再以2为起点继续搜索N行数据&#xff0c;停留在 2 5 (1)&#xff1b;再以5为起点继续搜索&#xff0c;停留在 5 6(1)&#xff0c;继续搜索停留在 6 7 (1)&#xff0c;当停

留在 5 7 (1)的时候&#xff0c;虽然出现了环 5 - 6 - 7&#xff0c;但是不满足以 1 为终点&#xff0c;所以搜索失败(再以7为起点搜索未果)&#xff1b;递归回来&#xff0c;

5 7 (-1)&#xff1b; 6 7 (-1)&#xff1b;5 6 (-1)&#xff1b;2 5 (-1)&#xff1b;继续以1为起点搜索......所以当以5为第一个起点搜索时&#xff0c;才会搜索成功。

#include

#include

int arr[][]&#61;{}; //分配3列

int N&#61;;

int flag&#61;; //flag&#61;&#61;1 表示找到起点&#xff0c;返回

int unaccess&#61;;

void dfs(int num,int value){

int i&#61;;

int j&#61;;

for(i&#61;;i<&#61;N-;i&#43;&#43;){

if(flag&#61;&#61;){

break;

}

for(j&#61;;j<&#61;;j&#43;&#43;){

//***************

if(i&#61;&#61;N- && j&#61;&#61; && arr[i][j]!&#61;num){ //叶子结点

unaccess&#61;;

break;

}

if(i&#61;&#61;N- && j&#61;&#61; && arr[i][j]&#61;&#61;num){

if(arr[i][]&#61;&#61;){ //叶子结点在第N行&#xff0c;这条边已经遍历过

unaccess&#61;;

break;

}

}

//***************

if(arr[i][j]&#61;&#61;num && arr[i][]&#61;&#61;){

arr[i][]&#61;;

//***************

if(j&#61;&#61;){

if(arr[i][]&#61;&#61;value){ //判断是不是起点

flag&#61;;

break;

}

}

else{

if(arr[i][]&#61;&#61;value){

flag&#61;;

break;

}

}

//***************

if(j&#61;&#61;){

dfs(arr[i][],value);

if(flag&#61;&#61;){

break;

}

if(unaccess&#61;&#61;){

arr[i][]&#61;-;

}

unaccess&#61;;

}

else{

dfs(arr[i][],value);

if(flag&#61;&#61;){

break;

}

if(unaccess&#61;&#61;){

arr[i][]&#61;-;

}

unaccess&#61;;

}

}

}

}

}

int main(){

scanf("%d",&N);

int i&#61;;

int j&#61;;

for(i&#61;;i<&#61;N-;i&#43;&#43;){

for(j&#61;;j<&#61;;j&#43;&#43;){

scanf("%d",&arr[i][j]);

}

}

for(i&#61;;i<&#61;N-;i&#43;&#43;){ //最后一列为0代表此边可以走

arr[i][]&#61;;

}

int num&#61;;

for(num&#61;;num<&#61;N;num&#43;&#43;){ // num代表起点和终点

dfs(num,num);

if(flag&#61;&#61;){

break;

}

else{

for(int z&#61;;z<&#61;N-;z&#43;&#43;){ //以新的起点继续dfs

arr[z][]&#61;;

}

}

}

int *RT; //此数组用来存放环中结点

RT&#61;(int *)malloc(sizeof(int)*(N&#43;));

for(i&#61;;i<&#61;N;i&#43;&#43;){

RT[i]&#61;;

}

for(i&#61;;i<&#61;N-;i&#43;&#43;){

if(arr[i][]&#61;&#61;){

RT[arr[i][]]&#61;;

RT[arr[i][]]&#61;;

}

}

for(i&#61;;i<&#61;N;i&#43;&#43;){

if(RT[i]&#61;&#61;){

printf("%d ",i);

}

}

free(RT);

return ;

}

有 错误 或 改良方法  欢迎提出。

12:49:48

2018-05-10

希尔伯特曲线——第八届蓝桥杯C语言B组(国赛)第三题

原创 标题:希尔伯特曲线 希尔伯特曲线是以下一系列分形曲线 Hn 的极限.我们可以把 Hn 看作一条覆盖 2^n × 2^n 方格矩阵的曲线,曲线上一共有 2^n × 2^n 个顶点(包括左下角起点和 ...

磁砖样式——第八届蓝桥杯C语言B组(国赛)第二题

原创 标题:磁砖样式 小明家的一面装饰墙原来是 3*10 的小方格.现在手头有一批刚好能盖住2个小方格的长方形瓷砖.瓷砖只有两种颜色:黄色和橙色. 小明想知道,对于这么简陋的原料,可以贴出多少种不同的 ...

2017第八届蓝桥杯C/C++ B组省赛-日期问题

标题:日期问题 小明正在整理一批历史文献.这些历史文献中出现了很多日期.小明知道这些日期都在1960年1月1日至2059年12月31日.令小明头疼的是,这些日期采用的格式非常不统一,有采用年/月/日的 ...

2017年第八届蓝桥杯C/C++B组省赛题目解析

一. 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优 ...

2017第八届蓝桥杯C/C++ B组省赛-购物单

标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折 ...

2017第八届蓝桥杯C/C++ B组省赛-等差素数列

标题:等差素数列 2,3,5,7,11,13,....是素数序列. 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列. 上边的数列公差为30,长度为6. 200 ...

第八届蓝桥杯C/C++ B组省赛----分巧克力

分巧克力 问题描述 儿童节那天有K位小朋友到小明家做客.小明拿出了珍藏的巧克力招待小朋友们. 小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形. 为了公平起见,小明需要从这 N 块巧 ...

2016 第七届蓝桥杯 c/c++ B组省赛真题及解题报告

2016 第七届蓝桥杯 c/c&#43;&#43; B组省赛真题及解题报告 勘误1:第6题第4个 if最后一个条件粗心写错了,答案应为1580. 条件应为abs(a[3]-a[7])!&#61;1,宝宝心理苦啊.!感谢zzh ...

2015年第六届蓝桥杯C/C++B组省赛题目解析

一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中 ...

随机推荐

Visual Studio2015 常用快捷键

项目相关的快捷键 Ctrl &#43; Shift &#43; B &#61; 生成项目 Ctrl &#43; Alt &#43; L &#61; 显示Solution Explorer(解决方案资源管理器) Shift &#43; Alt&#43; C &#61; 添加 ...

mvc action controller area

获取控制器名称: ViewContext.RouteData.Values["controller"].ToString(); 获取Action名称: ViewContext.Ro ...

Spring中映射Mongodb中注解的解释

spring-data-mongodb中的实体映射是通过MongoMappingConverter这个类实现的.它可以通过注释把java类转换为mongodb的文档. 它有以下几种注释: &#64;Id - ...

oracle 日期问题

共三部分: 第一部分:oracle sql日期比较: http://www.cnblogs.com/sopost/archive/2011/12/03/2275078.html 第二部分:Oracle ...

解决HtmlAgilityPack无法获取form标签子节点的问题

问题描述 今天使用HtmlAgilityPack提取Form表单下的input节点,发现提取的form节点没有子节点,InnerHtml也是为空,起初以为是标签不全导致,后来分析html代码发现不可能 ...

使用Ninject+Moq在单元测试中抽象数据访问层

一.测试方法的业务逻辑时,通常都需要从数据库读取测试数据,但是每次初始化数据库数据都很麻烦,也会影响到其它业务对数据的访问,怎样抽象数据访问层呢?就是用Moq去模拟数据访问的逻辑     二.步骤如下 ...

easyui validatebox 验证集合



推荐阅读
  • 本题探讨了在一个有向图中,如何根据特定规则将城市划分为若干个区域,使得每个区域内的城市之间能够相互到达,并且划分的区域数量最少。题目提供了时间限制和内存限制,要求在给定的城市和道路信息下,计算出最少需要划分的区域数量。 ... [详细]
  • 本文深入探讨了POJ2762问题,旨在通过强连通分量缩点和单向连通性的判断方法,解决有向图中任意两点之间的可达性问题。文章详细介绍了算法原理、实现步骤,并附带完整的代码示例。 ... [详细]
  • 中科院学位论文排版指南
    随着毕业季的到来,许多即将毕业的学生开始撰写学位论文。本文介绍了使用LaTeX排版学位论文的方法,特别是针对中国科学院大学研究生学位论文撰写规范指导意见的最新要求。LaTeX以其精确的控制和美观的排版效果成为许多学者的首选。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 丽江客栈选择问题
    本文介绍了一道经典的算法题,题目涉及在丽江河边的n家特色客栈中选择住宿方案。两位游客希望住在色调相同的两家客栈,并在晚上选择一家最低消费不超过p元的咖啡店小聚。我们将详细探讨如何计算满足条件的住宿方案总数。 ... [详细]
  • JSOI2010 蔬菜庆典:树结构中的无限大权值问题
    本文探讨了 JSOI2010 的蔬菜庆典问题,主要关注如何处理非根非叶子节点的无限大权值情况。通过分析根节点及其子树的特性,提出了有效的解决方案,并详细解释了算法的实现过程。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 20100423:Fixes:更新批处理,以兼容WIN7。第一次系统地玩QT,于是诞生了此预备式:【QT版本4.6.0&#x ... [详细]
  • 本文介绍了Linux系统中的文件IO操作,包括文件描述符、基本文件操作函数以及目录操作。详细解释了各个函数的参数和返回值,并提供了代码示例。 ... [详细]
  • 哈密顿回路问题旨在寻找一个简单回路,该回路包含图中的每个顶点。本文将介绍如何判断给定的路径是否构成哈密顿回路。 ... [详细]
  • C语言基础入门:7个经典小程序助你快速掌握编程技巧
    本文精选了7个经典的C语言小程序,旨在帮助初学者快速掌握编程基础。通过这些程序的实践,你将更深入地理解C语言的核心概念和语法结构。 ... [详细]
  • 本文详细介绍如何在Linux系统中配置SSH密钥对,以实现从一台主机到另一台主机的无密码登录。内容涵盖密钥对生成、公钥分发及权限设置等关键步骤。 ... [详细]
  • 本文探讨了在C++中如何有效地清空输入缓冲区,确保程序只处理最近的输入并丢弃多余的输入。我们将介绍一种不阻塞的方法,并提供一个具体的实现方案。 ... [详细]
  • 本问题探讨了在特定条件下排列儿童队伍的方法数量。题目要求计算满足条件的队伍排列总数,并使用递推算法和大数处理技术来解决这一问题。 ... [详细]
  • 本题要求实现一个函数,用于检查给定的字符串是否为回文。回文是指正向和反向读取都相同的字符串。例如,“XYZYX”和“xyzzyx”都是回文。 ... [详细]
author-avatar
郭洁蓉4071_878
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有