CSP-《I‘m stuck!》-感悟
题目
做题过程
注:黄色高亮表示需要注意的地方,蓝色粗体表示代码思路
好久没有写过代码了,今天做这道编程题,简直是灾难现场。
上午编程完后发现样例没有通过,检查发现算法思路出现了问题:我计数了S不能到达的格子。【要重视题目中的所有条件,特别时限制条件】
中午吃完饭后重新整理了思路:使用DFS分别标记可以从S出发到达的格子和可以到达T的格子,两种标记分别放在F1和F2数组中,其中1表示标记。
接下来又遇到了编译错误的问题,借鉴网上的说法直接再代码前加入一下万能引入便通过了:
#include <bits/stdc++.h>
using namespace std;
编译通过后,系统显示我只有10分,我检查了代码的思路,使用各种样例检查也没有问题。我自己写了个生成随机样例的代码:
#include<bits/stdc++.h>
using namespace std;#define R 50
#define C 50int main(){//随机生成地图 char M[8]={'+','.','+','|','+','-','+','#'};char a[R][C];srand((unsigned int)time(NULL));for(int i = 0; i < R; i++)for(int j = 0; j < C; j++)a[i][j]=M[rand() % 8];srand((unsigned int)time(NULL));a[rand() % R][rand() % C] = 'S';a[rand() % R][rand() % C] = 'T';//输出到文件 FILE* fp = fopen("C:/Users/kaoyan/Desktop/test.txt", "w");fprintf(fp,"%d %d\n",R, C); for(int i = 0; i < R; i++){for(int j = 0; j < C; j++)fprintf(fp,"%c",a[i][j]);fprintf(fp,"\n");}fclose(fp);return 0;
}
我在dev-c++尝试了很多次都没有问题,这使我很烦恼。纠结了一下午。
吃完晚饭后,我仔细想了想,那么多样例都没有问题,我的代码应该时没有问题的,而代码在dev-c++上运行和提交到系统运行的区别就在于输入不同,我便去检查了输入那部分的代码。我尝试去注释掉fflush(stdin);
后再提交惊奇地发现时满分o( ̄▽ ̄)ブ
我想,这可能是因为系统后台是不标准输入,至于避免回车换行地读入,只需要在后面的scanf中加上空格就行:scanf(" %c",MAP + i);
代码
#include <bits/stdc++.h>
using namespace std;int R, C, S, T; //S记录开始位置, T记录目标位置
char *MAP; //地图
char *F1; //非0格子表示可以从起点S到达的格子
char *F2; //非0格子表示可以到达目T的格子 //从格子G是否可以上移
bool CanUp(int G){if(G-C>=0 && MAP[G-C]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='|'))return true;elsereturn false;
}//从格子G是否可以下移
bool CanDown(int G){if(G+C<R*C && MAP[G+C]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='|'||MAP[G]=='.'))return true;elsereturn false;
}//从格子G是否可以左移
bool CanLeft(int G){if(G%C>0 && MAP[G-1]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='-'))return true;elsereturn false;
}//从格子G是否可以右移
bool CanRight(int G){if(G%C<C-1 && MAP[G+1]!='#' && (MAP[G]=='+'||MAP[G]=='S'||MAP[G]=='T'||MAP[G]=='-'))return true;elsereturn false;
}//递归遍历可以从G到达的邻居并更改F1
void ToNeighbor(int G){int n;//邻居位置//向上走 n = G - C; if(!F1[n] && CanUp(G)){F1[n] = 1;ToNeighbor(n);}//向下走 n = G + C; if(!F1[n] && CanDown(G)){F1[n] = 1;ToNeighbor(n);}//向左走 n = G - 1; if(!F1[n] && CanLeft(G)){F1[n] = 1;ToNeighbor(n);}//向右走 n = G + 1; if(!F1[n] && CanRight(G)){F1[n] = 1;ToNeighbor(n);}
}//递归遍历可以到达G的邻居并更改F2
void FromNeighbor(int G){int n;//邻居位置//判断上邻居n = G - C;if(n >= 0 && MAP[n] != '#' && !F2[n] && CanDown(n)){F2[n] = 1;FromNeighbor(n);}//判断下邻居n = G + C;if(n < R*C && MAP[n] != '#' && !F2[n] && CanUp(n)){F2[n] = 1;FromNeighbor(n);}//判断左邻居n = G - 1;if(G%C > 0 && MAP[n] != '#' && !F2[n] && CanRight(n)){F2[n] = 1;FromNeighbor(n);}//判断右邻居n = G + 1;if(G%C < C-1 && MAP[n] != '#' && !F2[n] && CanLeft(n)){F2[n] = 1;FromNeighbor(n);}
}int main(){//初始化 scanf("%d%d",&R,&C); //fflush(stdin);MAP = (char*)malloc(sizeof(char) * R * C);F1 = (char*)malloc(sizeof(char) * R * C);F2 = (char*)malloc(sizeof(char) * R * C);for(int i = 0; i < R * C; i++){scanf(" %c",MAP + i);if(MAP[i] == 'S')S = i;if(MAP[i] == 'T')T = i;F1[i] = 0;F2[i] = 0; }//填充F1(非0格子表示可以从起点到达的格子 ) F1[S] = 1;ToNeighbor(S);//递归遍历可以从S到达的格子并更改F1 //填充F2(非0格子表示可以到达目的的格子) F2[T] = 1;FromNeighbor(T);//递归遍历可以到达的T的格子并更改F1 if(!F1[T]){//从S不能到达T printf("I'm stuck!");return 0;}//计数有特征的格子个数int q = 0;for(int i = 0; i < R*C; i++)if(F1[i] == 1 && F2[i] == 0)q++;printf("%d",q);return 0;
}
相关文章:

CSP-《I‘m stuck!》-感悟
题目 做题过程 注:黄色高亮表示需要注意的地方,蓝色粗体表示代码思路 好久没有写过代码了,今天做这道编程题,简直是灾难现场。 上午编程完后发现样例没有通过,检查发现算法思路出现了问题:我计数了S不能到…...
[实践篇]13.19 Qnx进程管理slm学习笔记(二)
【QNX Hypervisor 2.2用户手册】目录(完结) 四,配置文件结构 4.1 根元素 一个配置文件的XML根元素是system,如下: <SLM:system>-- component and module descriptions -- </SLM:system> 4.2 组件 一个进程对于SLM来说就是一个组件。在配置文件中,你必须为一…...

(免费分享)基于 SpringBoot 的高校宿舍管理系统带论文
项目描述 系统代码质量高,功能强大,带论文。 系统的功能主要有: (1)基本信息管理 基本信息分为学生信息和宿舍信息两部分,其功能是负责维护这些信息,对 它们进行增删查改等操作。 &#x…...

运筹系列78:cbc使用介绍
1. 上手 1.1 快速使用 首先是简单的调用测试,在mac上首先安装clp的库:brew install coin-or-tools/coinor/cbc,然后新建项目进行调用,各项配置如下,注意要添加的library和directory比较多: 1.2 命令行方…...

RocketMQ底层源码解析——事务消息的实现
1. 简介 RocketMQ自身实现了事务消息,可以通过这个机制来实现一些对数据一致性有强需求的场景,保证上下游数据的一致性。 以电商交易场景为例,用户支付订单这一核心操作的同时会涉及到下游物流发货、积分变更、购物车状态清空等多个子系统…...

学习802.11之MAC帧格式(一篇就够!)
802.11规范的关键在于MAC(媒介访问控制层),MAC位于各式物理层之上,控制数据传输。负责核心成帧操作以及与有线骨干网络之间的交互。 802.11 MAC采用载波监听多路访问(CSMA)机制来控制对传输媒介的访问&…...

使用阿里云IoT Studio建立物模型可视化界面
使用阿里云IoT Studio建立物模型可视化界面 上一篇文章介绍了如何使用ESP-01S上报数据到物模型:https://blog.csdn.net/weixin_46251230/article/details/128996719 这次使用阿里云IoT Studio建立物模型的Web页面 阿里云IoT Studio: https://studio.i…...
HBase 复习 ---- chapter07
HBase 复习 ---- chapter07部署 HBase(运维) 1:部署 HBase 实际是部署了三个技术(hadoop zookeeper hbase) hadoop hdfs mapreduce common hdfs namenode datanode secondaryNamenode yarn ResourceManager&a…...

跟我一起写Makefile--个人总结
此篇笔记是根据陈皓大佬《跟我一起写Makefile》学习所得 文章目录换行符clean变量make的自动推导另类风格的Makefile清空目标文件的规则cleanMakefile总述显示规则隐晦规则变量的定义注释引用其它的Makefile环境变量MAKEFILESmake的工作方式书写规则规则举例规则的语法在规则中…...
设计模式之为什么要学好设计模式
目录1 回顾软件设计原则2 设计模式总览3 经典框架都在用设计模式解决问题1 回顾软件设计原则 不用设计模式并非不可以,但是用好设计模式能帮助我们更好地解决实际问题,设计模式最重要的是解耦。设计模式天天都在用,但自己却无感知。我们把设…...

大数据时代的小数据神器 - asqlcell
自从Google发布了经典的MapReduce论文,以及Yahoo开源了Hadoop的实现,大数据这个词就成为了一个行业的热门。在不断提高的机器性能和各种层出不穷的工具框架加持下,数据分析开始从过去的采样抽查变成全量整体,原先被抽样丢弃的隐藏…...

【呕心沥血】整理全栈自动化测试技术(三):如何编写技术方案
前面两篇笔记我介绍了自动化测试前期调研注意事项和前置准备阶段切入点,有同学在后台提问: “做完前期的调研和准备工作,领导要求写一个落地方案并评审,自动化测试的落地方案该怎么写”? 首先这个要求我觉得挺正常&a…...

67. 二进制求和
文章目录题目描述竖式模拟转换为十进制计算题目描述 给你两个二进制字符串 a 和 b ,以二进制字符串的形式返回它们的和。 示例 1: 输入:a “11”, b “1” 输出:“100” 示例 2: 输入:a “1010”, b “1011” …...
1555数列极差(队列 优先队列 )
目录 题目描述 解题思路 代码部分 题目描述 在黑板上写了N个正整数作成的一个数列,进行如下操作:每一次擦去其中的两个数a和b,然后在数列中加入一个数a*b1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得…...

代码随想录算法训练营第二十七天 | 93.复原IP地址,78.子集,90.子集II
一、参考资料复原IP地址题目链接/文章讲解:https://programmercarl.com/0093.%E5%A4%8D%E5%8E%9FIP%E5%9C%B0%E5%9D%80.html 视频讲解:https://www.bilibili.com/video/BV1XP4y1U73i/子集题目链接/文章讲解:https://programmercarl.com/0078.…...
jvm类加载器
概念 Bootstarp ClassLoader (引导类加载器) 加载String等核心的类Ext ClassLoader (拓展类加载器)System ClassLoader (系统类加载器) 加载用户自定义的类 关系 BootstrapClassLoader 包含 ExtClassLoaderExtClassLoader 包含 SystemClassLoader彼此是包含关系,不…...

Rust学习入门--【7】Rust 数据类型
类型系统 对于任何一门语言都是重中之重,因为它体现了语言所支持的不同类型的值。 类型系统 也是 IT 初学者最难啃的三座大山之一,而类型系统之所以难以理解,主要是没有合适的现成的参考体系。 我们说类型系统 存在的目的,就是 …...

阅读MySQL必知必会,查缺补漏
MySQL自带数据库 information_schema:是MySQL自带的数据库,主要保持MySQL数据库服务器的系统信息,比如数据库的名称,数据库表的名称,字段名称,存储权限等。 performance_schema:是MySQL系统自…...

MySQL数据库10——多表连接查询
数据如果在多个表里面,需要进行连接查询。 一般在pandas里面merge合并会用到一个索引,按这个索引的规则进行合并叫做有规则的等值连接。若不按规则连接,遍历两两组合的所有可能性,叫做笛卡尔积。 笛卡尔积连接 通常人们都会设置…...
华为OD机试 - 括号检查(Python)| 真题含思路
括号检查 题目 现有一字符串 仅由 (,),{,},[,] 六种括号组成,若字符串满足以下条件之一,则为无效字符串 任意类型的左右括号数量不相等 存在未按正确顺序(先左后右)闭合的括号, 输出括号的最大嵌套深度 若字符串无效则输出 0 0 <= 字符串长度 <= 100000 输入 一个只…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
Linux链表操作全解析
Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表?1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

linux arm系统烧录
1、打开瑞芯微程序 2、按住linux arm 的 recover按键 插入电源 3、当瑞芯微检测到有设备 4、松开recover按键 5、选择升级固件 6、点击固件选择本地刷机的linux arm 镜像 7、点击升级 (忘了有没有这步了 估计有) 刷机程序 和 镜像 就不提供了。要刷的时…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分
一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计,提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合:各模块职责清晰,便于独立开发…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...

sshd代码修改banner
sshd服务连接之后会收到字符串: SSH-2.0-OpenSSH_9.5 容易被hacker识别此服务为sshd服务。 是否可以通过修改此banner达到让人无法识别此服务的目的呢? 不能。因为这是写的SSH的协议中的。 也就是协议规定了banner必须这么写。 SSH- 开头,…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...
uniapp获取当前位置和经纬度信息
1.1. 获取当前位置和经纬度信息(需要配置高的SDK) 调用uni-app官方API中的uni.chooseLocation(),即打开地图选择位置。 <button click"getAddress">获取定位</button> const getAddress () > {uni.chooseLocatio…...