当前位置: 首页 > news >正文

UVA-208 消防车 题解答案代码 算法竞赛入门经典第二版

GitHub - jzplp/aoapc-UVA-Answer: 算法竞赛入门经典 例题和习题答案 刘汝佳 第二版

一道不难的DFS题目。

直接用DFS遍历会超时。要先遍历一遍连通图,看看1和终点是否联通。

这里有同学会问,遍历连通图也用的是DFS呀,为啥不会超时?因为我们要记录路径,所以DFS函数退出时要设置重新设置点为未访问过。但是连通图并不需要。所以连通图要快很多。

另外题目的输出样例不对。看起来是%4d或者\t,但实际上就是普通的单个空格,甚至最前面不用空。(可以参考代码)

AC代码

#include <stdio.h>
#include <string.h>
#define MAX 21int terminal;
int map[MAX][MAX];
int tempLine[MAX];
int totalLine[MAX][10000];
int totalNum = 0;
int findStatus[MAX];void copyLine(int *arr1, int *arr2)
{for (int i = 0; arr1[i]; ++i){arr2[i] = arr1[i];}
}// 初始化
void init()
{memset(map, 0, sizeof(map));memset(tempLine, 0, sizeof(tempLine));memset(totalLine, 0, sizeof(totalLine));memset(findStatus, 0, sizeof(findStatus));totalNum = 0;
}void dfs(int i, int num)
{tempLine[num] = i;findStatus[i] = 1;++num;if (i == terminal){copyLine(tempLine, totalLine[totalNum]);++totalNum;findStatus[i] = 0;return;}int x, y;for (x = 1; x < MAX; ++x){if (map[i][x] && !findStatus[x]){dfs(x, num);tempLine[num] = 0;}}findStatus[i] = 0;
}void findDfs(int i)
{findStatus[i] = 1;for (int x = 1; x < MAX; ++x){if (map[i][x] && !findStatus[x])findDfs(x);}
}int main()
{int x, y, i = 0;while (scanf("%d", &terminal) == 1){// 初始化init();++i;while (scanf("%d %d", &x, &y) == 2 && x != 0){map[x][y] = 1;map[y][x] = 1;}printf("CASE %d:\n", i);// 先求联通图findDfs(1);if (!findStatus[terminal]){printf("There are 0 routes from the firestation to streetcorner %d.\n", terminal);continue;}memset(findStatus, 0, sizeof(findStatus));dfs(1, 0);for (x = 0; x < totalNum; ++x){for (y = 0; totalLine[x][y]; ++y){if (y != 0)putchar(' ');printf("%d", totalLine[x][y]);}putchar('\n');}printf("There are %d routes from the firestation to streetcorner %d.\n", totalNum, terminal);}return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【Git 学习笔记_24】Git 使用冷门操作技巧(四)——更多实用 git 别名设置、交互式新增提交
  • node.js实现阿里云短信发送
  • 使用3DUNet训练自己的数据集(pytorch)— 医疗影像分割
  • C# 特性(Attributes)和反射(Reflection)
  • 探索EasyCVR与AI技术深度融合:视频汇聚平台的新增长点
  • 匈牙利算法实现(from scipy.optimize import linear_sum_assignment)
  • 1-8 图像腐蚀 opencv树莓派4B 入门系列笔记
  • 2024国赛数学建模C题完整论文:农作物的种植策略
  • 在安卓和Windows下使用Vizario H264 RTSP
  • 计算机毕业设计选题推荐-动漫插画分享网站-Java/Python项目实战
  • Springboot工程配置https访问
  • 如何在SQL Server中恢复多个数据库?
  • 龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮
  • LIN总线CAPL函数—— 检查LIN报头的时间(ChkStart_LINHeaderToleranceViolation
  • redis为什么快
  • 【刷算法】从上往下打印二叉树
  • AHK 中 = 和 == 等比较运算符的用法
  • Apache Spark Streaming 使用实例
  • HTTP传输编码增加了传输量,只为解决这一个问题 | 实用 HTTP
  • js正则,这点儿就够用了
  • k8s如何管理Pod
  • Object.assign方法不能实现深复制
  • 规范化安全开发 KOA 手脚架
  • 如何设计一个比特币钱包服务
  • 我从编程教室毕业
  • 由插件封装引出的一丢丢思考
  • MyCAT水平分库
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​secrets --- 生成管理密码的安全随机数​
  • # Redis 入门到精通(九)-- 主从复制(1)
  • #android不同版本废弃api,新api。
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • #预处理和函数的对比以及条件编译
  • (12)Linux 常见的三种进程状态
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (ibm)Java 语言的 XPath API
  • (LLM) 很笨
  • (pycharm)安装python库函数Matplotlib步骤
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (十)c52学习之旅-定时器实验
  • ***通过什么方式***网吧
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .Net Core 微服务之Consul(二)-集群搭建
  • .Net Core中Quartz的使用方法
  • .NET Framework杂记
  • .Net转Java自学之路—SpringMVC框架篇六(异常处理)
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • @Value获取值和@ConfigurationProperties获取值用法及比较(springboot)
  • [ C++ ] STL_list 使用及其模拟实现
  • [].slice.call()将类数组转化为真正的数组
  • [20171101]rman to destination.txt
  • [BUG]Datax写入数据到psql报不能序列化特殊字符