The Clocks

Problem:

The Clocks
IOI'94 - Day 2

Consider nine clocks arranged in a 3x3 array thusly:

|-------|    |-------|    |-------|    
|       |    |       |    |   |   |    
|---O   |    |---O   |    |   O   |          
|       |    |       |    |       |           
|-------|    |-------|    |-------|    
    A            B            C

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O   |    |   O   |
|   |   |    |   |   |    |   |   |
|-------|    |-------|    |-------|
    D            E            F

|-------|    |-------|    |-------|
|       |    |       |    |       |
|   O   |    |   O---|    |   O   |
|   |   |    |       |    |   |   |
|-------|    |-------|    |-------|
    G            H            I

The goal is to find a minimal sequence of moves to return all the dials to 12 o'clock. Nine different ways to turn the dials on the clocks are supplied via a table below; each way is called a move. Select for each move a number 1 through 9 which will cause the dials of the affected clocks (see next table) to be turned 90 degrees clockwise.

Move Affected clocks
1 ABDE
2 ABC
3 BCEF
4 ADG
5 BDEFH
6 CFI
7 DEGH
8 GHI
9 EFHI

Example

Each number represents a time accoring to following table:

9 9 12       9 12 12       9 12 12        12 12 12      12 12 12 
6 6 6  5 ->  9  9  9  8->  9  9  9  4 ->  12  9  9  9-> 12 12 12 
6 3 6        6  6  6       9  9  9        12  9  9      12 12 12 

[But this might or might not be the `correct' answer; see below.]

PROGRAM NAME: clocks

INPUT FORMAT

Lines 1-3: Three lines of three space-separated numbers; each number represents the start time of one clock, 3, 6, 9, or 12. The ordering of the numbers corresponds to the first example above.

SAMPLE INPUT (file clocks.in)

9 9 12
6 6 6
6 3 6

OUTPUT FORMAT

A single line that contains a space separated list of the shortest sequence of moves (designated by numbers) which returns all the clocks to 12:00. If there is more than one solution, print the one which gives the lowest number when the moves are concatenated (e.g., 5 2 4 6 < 9 3 1 1).

SAMPLE OUTPUT (file clocks.out)

4 5 8 9

 


My Answer:


My Thought:

看了TEXT,以为一定要用DFS做。
但是单看那篇TEXT,以及大一学到的八皇后的例子,我完全不知道用DFS去实现,应该遇到怎样的情况下进行回溯。
所以还是进行了枚举。
值得一提的是,这是我第一次定义指向函数的指针的数组,也是我第一次使用goto。
前者需要继续练习,非常方便。
后者需要学习一下这个语句。

 


My Question:

我还有一个疑问。

在没有#include<cstring>时,自己机子上可以运行,但提交后就跑不动。

我不明白这个cstring类的用处是什么?

<think>嗯,用户遇到了RTAB-Map的警告消息:"Did not receive data since 5 seconds",这在使用ROS时很常见。用户特别提到时间戳同步问题,说明已经注意到警告中建议的ntpdate方案。 用户可能正在尝试进行实时建图或定位任务,这个警告会导致可视化中断或建图不连续。深层需求应该是希望RTAB-Map能稳定运行,不丢失传感器数据。从引用内容看,用户应该已经配置了多传感器(至少两个红外相机和里程计),且尝试过调整同步队列参数但未解决。 需要重点解决三个核心问题:时间同步机制、数据流频率匹配、同步参数优化。其中时间同步是基础,必须确保所有设备使用统一时钟源。引用1提到同步队列大小设置,引用3则提供了不同启动文件的选择建议,这些都很关键。 对于时间同步方案,不仅要安装ntp,还需要确认具体设备的时钟偏移值。用户可能不知道可以查看ntpstat或ntpq -p的输出结果,这部分需要详细说明。另外rosbag播放时的时间同步问题容易被忽略,需要单独提醒。 关于数据频率检测,用户可能只检查了单个topic的频率,而没注意不同topic之间的发布间隔差异。建议同时监控所有相关topic的hz,并观察时间戳差值。引用1中列出的/camera/infra开头的topic都需要检查。 参数调整部分,sync_queue_size和topic_queue_size的默认值(100和10)可能不够,特别是当红外相机帧率较高时。但直接调大到1000可能增加延迟,需要平衡。如果用户使用外部同步硬件,这个参数可以适当降低。 最后要提醒用户,如果使用rtabmap_odom.launch(引用3),要注意它不包含全局优化,可能影响闭环检测。而可视化节点依赖闭环信息,这也可能导致数据不同步的假象。</think>针对RTAB-Map可视化节点`rtabmap_viz`报出的 **"Did not receive data since 5 seconds"** 警告问题,以下是系统性的解决方案,按优先级排序: --- ### **1. 检查数据流频率与同步性** - **检测数据发布频率**: 对警告中列出的每个Topic执行频率检测(例如 `/camera/infra1/image_rect_raw`): ```bash rostopic hz /camera/infra1/image_rect_raw rostopic hz /rtabmap/odom ``` *👉 结果要求*:所有Topic需保持**稳定且相近的发布频率**(如30Hz)。若频率差异过大(如一个10Hz,一个30Hz),需调整传感器配置或降低高频率Topic的发布速率[^1]。 - **验证时间戳同步**: 检查不同Topic消息头中的时间戳偏移: ```bash rostopic echo /camera/infra1/image_rect_raw/header/stamp rostopic echo /rtabmap/odom/header/stamp ``` *👉 要求*:时间戳偏差应 **< 0.01秒**。若偏差持续增大,需进行时钟同步。 --- ### **2. 强制时钟同步(关键步骤)** - **安装NTP工具**: ```bash sudo apt install chrony ntpdate ``` - **同步所有设备时钟**: 在**所有**参与ROS通信的设备(包括机器人主机、传感器主机等)执行: ```bash sudo ntpdate pool.ntp.org # 或替换为局域网NTP服务器 sudo service ntp restart ``` - **验证同步结果**: 在所有设备运行: ```bash ntpq -p ``` *👉 要求*:输出中的`offset`列数值应 **< 1毫秒**[^1]。 --- ### **3. 调整同步队列参数** - **修改启动文件参数**: 在`rtabmap.launch`或自定义启动文件中增加同步容错参数: ```xml <param name="sync_queue_size" value="100"/> <!-- 默认100,可增至200 --> <param name="topic_queue_size" value="50"/> <!-- 默认10,可增至30 --> <param name="approx_sync" value="true"/> <!-- 若无法严格同步,启用近似同步 --> ``` *📌 参数说明*: - `sync_queue_size`:缓冲不同Topic消息的队列容量 - `topic_queue_size`:单个Topic的缓存消息数 - `approx_sync`:允许时间戳微小差异[^1][^3] --- ### **4. 检查Topic名称与重映射** - **确认Topic名称匹配**: 检查`rtabmap_viz`订阅的Topic是否与传感器发布Topic**完全一致**。例如: ```bash rostopic list | grep infra1 # 确认实际发布的Topic名称 ``` - **添加重映射**(如必要): 在启动`rtabmap_viz`时修正Topic路径: ```bash rosrun rtabmap_ros rtabmap_viz \ odom:=/corrected/odom \ rgb/image:=/camera/rgb/image_rect \ depth/image:=/camera/depth_registered/image ``` --- ### **5. 验证传感器数据流完整性** - **检查数据中断原因**: 使用`rqt_graph`确认节点连接正常,无Topic阻塞。 通过`rosbag record`录制数据后回放,排除硬件故障: ```bash rosbag record -O test.bag /camera/infra1/image_rect_raw /rtabmap/odom rosbag play test.bag --clock # 回放时模拟时钟 ``` --- ### **6. 使用专用同步启动文件** - 若问题持续,改用同步优化版的启动文件: ```bash roslaunch rtabmap_ros rtabmap_sync.launch # 专为RGB-D同步设计[^3] ``` --- ### **典型问题排查表** | 现象 | 可能原因 | 解决方案 | |---------------------|--------------------------|------------------------------| | 部分Topic无输出 | 传感器未启动或Topic改名 | `rostopic list`检查并重映射 | | 时间戳跳跃 | 未启用NTP或硬件时钟不同步| 强制NTP同步所有设备 | | 高频Topic丢失数据 | 同步队列过小 | 增大`sync_queue_size`至200+ | | 仅回放数据时出警告 | rosbag未启用`--clock` | 回放时添加`--clock`参数 | > **关键提示**:若使用**多台设备**(如分离式相机与主机),务必通过`ntpdate`实现亚毫秒级时钟同步,这是解决数据不同步的核心[^1][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值