- 博客(160)
- 资源 (5)
- 收藏
- 关注
原创 libuvc初探
本文介绍了libuvc库的使用方法,该库是基于libusb的跨平台USB视频设备控制库。主要内容包括:1) libuvc简介及其优势;2) 编译安装步骤及依赖项;3) 编程流程,从设备初始化到参数设置共10个关键步骤;4) 示例代码展示如何查找设备、设置视频格式和采集图像。特别指出libuvc能获取视频帧的绝对时间戳,解决了v4l2只能获取相对时间戳的问题。文中提供了详细的代码片段,包括设备查找、格式设置和自动曝光调整等核心功能实现。
2025-12-25 17:57:25
448
原创 在 vscode 中断点调试 ROS2 C++ 的办法
本文介绍了在VSCode中调试ROS2 C++程序的方法。首先需要安装Robotics Developer Environment插件,并使用Debug模式编译项目。然后通过ROS指令生成配置文件,修改settings.json添加ROS2配置,并创建launch.json设置调试目标。调试时可在Run and Debug栏选择相应配置,按F5进行断点调试。文章还提供了处理共享库错误的解决方案(执行sudo ldconfig)。最后列出了参考的知乎和优快云文章链接。
2025-12-24 19:17:24
411
1
原创 v4l2初探
本文介绍了Linux视频驱动框架V4L2的基本概念和编程流程。V4L2为应用层提供统一的操作接口,主要包括以下步骤:1)使用v4l2-ctl工具查找设备列表;2)打开设备文件;3)通过ioctl命令设置设备属性、数据格式和输入输出方法;4)申请和初始化内存缓冲区;5)进行输入输出循环。文章还详细展示了Python实现V4L2编程的完整流程,包括设备能力查询、格式枚举、参数设置等关键操作,并提供了具体的代码示例。最后指出大多数操作都是通过ioctl系统调用实现的。
2025-12-24 12:56:13
866
原创 画面闪烁的解决办法——双缓冲技术
本文介绍了解决tkinter Canvas组件动态更新图片时出现画面闪烁的双缓冲技术。通过创建两个缓冲区(buf1和buf2)交替存储图像帧,始终保持上一帧和当前帧的引用,避免帧数据提前释放。代码示例展示了常规更新方式(左侧)与双缓冲技术(右侧)的对比效果,双缓冲技术能有效消除画面闪烁现象。实现原理是:在更新图像时,交替使用两个缓冲区,确保显示当前帧时另一缓冲区已准备好下一帧,从而保证画面流畅不闪烁。
2025-12-24 01:14:50
165
原创 python调用c动态库——以TSTC_USBCam_SDK为例
本文总结了Python调用C动态库的实践方法,以TSTC_USBCam_SDK为例。主要内容包括:使用ctypes.CDLL加载动态库及其依赖库的方法;C与Python数据类型的对应关系;结构体、联合体等复杂类型的适配方式;以及函数参数传递、指针处理等注意事项。文章详细介绍了字符串转换、数组初始化、结构体初始化和二维指针处理等关键点,并提供了匿名成员结构体的适配示例。通过实际代码演示了如何正确设置函数参数类型(argtypes)和返回类型(restype),为Python调用C动态库提供了实用参考。
2025-12-17 16:44:58
912
原创 定位、感知、融合长期演进综述
本文综述了SLAM技术的框架、分类及发展趋势。首先介绍了SLAM系统的基本架构,包括传感器数据采集、前端里程计、后端优化、地图构建和回环检测等核心模块。随后详细分析了视觉SLAM(VIO)和激光SLAM(LIO)的代表性算法,如ORB-SLAM、MSCKF、VINS-Fusion系列以及Cartographer、LOAM系列等。重点探讨了视觉与激光融合的SLAM方案(如FAST-LIO2)的技术优势,包括直接法融合策略、统一体素地图和ESIKF惯序更新等创新点。最后展望了基于深度学习的SLAM发展方向。
2025-12-11 18:09:28
840
原创 将ROS1项目迁移到ROS2——以imu_utils项目为例
本文介绍了将ROS1项目imu_utils迁移到ROS2的详细过程。主要内容包括:1)创建功能包并设置基础配置;2)修改package.xml文件,转换ROS1依赖项为ROS2对应名称;3)调整CMakeLists.txt文件,使用ament_cmake构建系统替代catkin,包括添加编译选项、处理依赖关系、导出头文件目录等;4)具体实现静态库和可执行文件的构建与链接。最终成果已发布在GitHub(imu_utils_ros2),为ROS1项目向ROS2迁移提供了实践参考。迁移过程中重点关注了构建系统差异
2025-12-06 13:29:34
1049
原创 UVa10514 River Crossing
有一条很宽的河,中间有n(0≤n≤11)个小岛。给出两条河岸线(均为最多有100 个顶点的折线)和小岛(均为简单多边形)的信息,求一条过河的路径,使得淌水部分的总长度最短。假定只能从图中看得见的地方过河。用floyd算法即可,需要预先计算河道-河道、河道-小岛、小岛-小岛的直接淌水最小长度作为dp的初值。
2025-11-22 20:45:43
421
原创 UVa1138/LA2947 Roof
该问题要求计算多个非水平屋顶在垂直降雨情况下的雨水流量分布。通过离散化处理屋顶端点坐标,利用集合维护每个x区间内的最高屋顶段,并按高度顺序处理雨水流量转移。需要注意雨水可能流向相邻较低屋顶或下方屋顶的复杂情况。算法在离散化后高效处理最多40,000个屋顶,确保竖线最多与100个屋顶相交的约束条件。最后输出每个屋顶边缘的单位时间雨量。代码实现中使用了集合排序和二分查找等技术来优化计算过程。
2025-11-18 14:10:41
390
原创 UVa12237/LA4492 Jiajia‘s Robot
佳佳的双目机器人通过两条相互垂直的射线与线段MA、MB相交实现自定位。计算机器人可定位区域的面积,需要处理以线段端点组合形成的4个圆的差集面积并。关键步骤包括离散化处理、圆差集判断以及动态区域计算。通过几何分析确定有效区域,排除无效部分(如完全在圆外或四个圆共同相交区域)。最终采用离散化方法计算面积,解决该几何问题。
2025-11-07 13:32:59
1045
原创 UVa1497/LA5719 A Letter to Programmers
本文分析了UVa1497/LA5719题目,要求通过5种指令对空间中的点进行变换。关键点在于构造变换矩阵并处理嵌套的repeat指令。通过矩阵快速幂优化重复操作,并修正了浮点精度问题(加1e-6)。最终将变换矩阵应用于所有输入点,输出保留两位小数的结果。
2025-10-23 23:29:54
463
原创 UVa11213 Flipull
深入剖析了UVa11213 Flipull益智游戏的算法设计与实现难点。游戏规则要求玩家通过发射4种基础方块(三角T/圆圈O/方块#/十字X)和1种魔法方块(M),在4×4至6×6的棋盘上消除同色块,最终剩余不超过b个方块。用IDA*算法能AC。采用BFS遍历时创新性使用字典树(Trie)进行状态判重会TLE,但Trie树判重方案对状态空间搜索类问题具有普适参考价值。
2025-10-10 05:49:53
1026
原创 UVa11211 Digital Logic
UVa11211 Digital Logic 要求设计一个4输入4输出的数字电路,使用给定的逻辑门类型。每个逻辑门由3个0-1整数描述不同输入情况下的输出。电路需满足无环路、使用最少逻辑门(最多6个)的要求。输入包含多组测试数据,每组给出逻辑门类型和期望输出。输出需给出最优电路设计方案,包括使用的逻辑门数量、连接方式和输出端口。解题关键在于状态设计和剪枝优化,通过BFS和合理状态表示来减少计算量。
2025-09-30 17:46:14
1067
原创 UVa1008/LA2240 A Vexing Problem
本文介绍了2001年ICPC世界总决赛的一道题目——Vexed游戏求解问题。题目要求在一个R行C列的网格中,通过最少的移动步数消除所有石块。石块可以左右移动,当相邻石块标记相同时会形成石块群并消失,随后悬空石块会下落直至稳定。输入包含多组测试数据,每组数据给出初始网格状态,要求输出最少操作次数及方案。分析指出该问题可通过BFS暴力搜索解决,利用集合判重。文章提供了完整的AC代码实现,包括状态处理、移动逻辑、石块消除和下落模拟等关键步骤,最终输出最优解的操作序列。
2025-09-26 17:10:45
713
原创 UVa12418 Game of 999
这是一道关于NDS游戏《9小时9人9扇门》改编的迷宫逃脱问题。题目要求计算9个人在特定规则下最多能逃脱的人数及所有可能的逃脱组合。主要规则包括:每扇门只能由3-5人打开,且这些人编号之和的数字根要等于门上的数字;门一旦被通过就永久锁闭。输入包含房间和走廊信息,输出为最多逃脱人数及所有可能的逃脱组合(按字典序排列)。解题思路是预处理数字根对应的集合,使用BFS遍历所有可能状态,并用集合判重。最终通过状态压缩和位运算高效求解。
2025-09-25 23:17:17
1045
原创 UVa1505/LA5835 Flood-it!
UVa1505/LA5835 Flood-it!题目要求在一个N×N网格中,通过改变左上角连通块的颜色来使整个网格颜色统一。每次操作将左上角连通块改为0-5中的一种颜色,求最少操作次数。采用IDA*算法进行启发式搜索,预处理连通块及其相邻关系,启发函数估算剩余步数。代码实现包括连通块处理、迭代加深搜索和启发式评估,最终输出最少操作次数。
2025-09-25 01:05:31
494
原创 UVa1353/LA3402 Organize Your Train
本文研究了 UVa1353/LA3402 Organize Your Train 问题,关于火车车厢重组问题。题目给出多条火车线路及其交换线连接方式,要求将初始车厢排列转换为目标排列的最少操作次数。由于状态空间较大,采用双向BFS策略:从初始状态和目标状态各扩展3层,若中间相遇则总步数为6。代码实现了状态转移和双向搜索,通过集合判重优化效率。测试表明该算法能有效求解,时间复杂度和空间复杂度均控制在合理范围内。
2025-09-24 19:35:12
834
原创 UVa1499/LA5722 Gem And Prince
这是一道关于消除类游戏的搜索问题,要求找出消除所有可消除块后的最大得分。题目描述了一个8连通的消除规则,消除后元素会下落且空列会左移。分析指出可以采用启发式搜索(A*算法)来求解,通过启发函数剪枝优化。代码实现了状态转移和启发式评估,通过递归搜索所有可能的消除路径来找到最优解。输入输出格式简单,适合作为竞赛题目测试选手的搜索优化能力。
2025-09-24 01:56:11
803
原创 UVa1495/LA5715 Three Kingdom Chess
摘要 本文分析了UVa1495/LA5715三国棋类游戏问题。题目描述诸葛亮和周瑜在N×M棋盘上进行K轮对战,双方轮流操作三种棋子(步兵、骑兵、弓箭手),每种棋子有不同的移动和攻击规则。游戏得分计算为诸葛亮棋子体力总和减去周瑜的。解题采用极大极小搜索算法配合alpha-beta剪枝优化。关键点在于处理"按兵不动"策略带来的状态重复问题,以及在移动时限制不能走回原位置。代码展示了如何实现状态转移和攻击判定,通过剪枝优化搜索效率。输入包含棋盘信息、棋子属性和初始位置,输出最终得分。
2025-09-23 21:03:29
1026
原创 UVa12180/LA4300 The Game
本文分析了UVa12180/LA4300双人石子游戏问题。游戏规则复杂,涉及石子分配、交换机会和特殊得分规则。解题关键在于正确理解题意并实现极大极小搜索算法,结合alpha-beta剪枝优化。输入包含多组测试数据,每组给出杯子数和初始石子分布,要求输出双方最优策略下的最大得分差。代码通过状态转移和剪枝策略高效求解,时间复杂度主要取决于游戏状态空间的大小。
2025-09-22 21:22:21
1075
原创 UVa1041/LA3272 cNteSahruPfefrlefe
本文分析了UVa1041/LA3272,研究扑克牌洗牌过程中可能出现的相邻牌交换错误。题目要求给定洗牌后的结果,找出最少错误次数和字典序最小的错误位置序列。通过分析洗牌错误形成的环结构,提出使用IDA*算法,并设计启发函数来估计剩余最小错误次数。代码实现了洗牌模拟和搜索过程,能够高效找到最优解。最终输出包括洗牌次数、错误位置等信息,满足题目要求的最小字典序输出。该解法适用于ICPC竞赛中的类似问题。
2025-09-20 13:19:50
1032
原创 UVa1603/LA2328 Square Destroyer
UVa1603/LA2328 Square Destroyer题目要求在一个由火柴棍组成的n×n网格中,移除最少数量的火柴以破坏所有正方形。文中分析了两种搜索策略:基于正方形的迭代加深搜索和基于火柴的优化搜索,并提供了使用DLX重复覆盖算法的AC代码。代码通过精确建模和高效剪枝,计算最少需要移除的火柴数。输入包含网格尺寸和已移除火柴信息,输出完成目标所需的最少移除数量。该问题源于2001年ICPC亚洲区域赛韩国赛区。
2025-09-19 16:06:40
634
原创 UVa1602/LA3224 Lattice Animals
本文介绍了UVa1602/LA3224 Lattice Animals问题的解法。题目要求计算在w×h网格中不同的n连块数量,考虑平移、旋转、翻转后的相同性。通过预处理生成所有可能的1到10连块,并使用旋转、翻转变换进行判重,最后建立查找表直接输出答案。代码实现了生成所有n连块并统计满足条件的解,适用于1≤n≤10的情况。
2025-09-19 15:39:52
1052
原创 UVa1374/LA3621 Power Calculus
使用IDA*算法解决UVa1374/LA3621 Power Calculus。题目要求计算从x出发,通过最少次数的乘除运算得到x^n,其中1≤n≤1000。算法采用迭代加深搜索结合启发式剪枝:在当前最大指数x和剩余步数d-s的情况下,若x×2^(d-s) < n则直接剪枝。此外,优化策略包括优先使用最近生成的数、限制超过n的指数数量、优先考虑加法操作等。AC代码展示了实现细节,通过逐步增加搜索深度ans直至找到解。该算法高效地解决了这一典型的幂次计算问题。
2025-09-19 15:19:01
1098
原创 UVa12325/LA5703 Zombie‘s Treasure Chest
题目为Zombie's Treasure Chest,要求在一个体积为N的箱子中装两种无限数量的宝物,使总价值最大。通过分析得出两种枚举策略:当min(S1,S2)较小时枚举总体积;否则枚举一种宝物的数量。利用扩展欧几里得算法求解二元一次方程的非负整数解,并选取使价值最大的解。代码实现了这两种策略,考虑了边界条件和数学推导,最终输出每组测试数据的最优解。
2025-09-18 13:54:39
840
原创 UVa11212 Editing a Book
本文介绍了UVa11212 Editing a Book题目,要求通过剪切粘贴操作将文章段落排列成升序。题目分析指出可使用IDA*算法求解,其中关键启发函数考虑后继不正确的数字个数h,证明每次操作h最多减少3。给出了两个加速策略:避免破坏已连续片段,以及优化粘贴位置选择。代码实现了该算法,通过迭代加深搜索找到最少操作次数。对于n≤9的情况,最多需要8步即可完成。
2025-09-18 12:45:11
562
原创 UVa10603 Fill
UVa10603 Fill问题探讨了三个不同容量杯子的倒水问题。初始状态为第三个杯子装满水,其他为空。要求通过最少倒水量,使任一杯子中的水量恰好为d升(若无法达到则取最接近且小于d的值)。分析指出状态总数有限,可用Dijkstra算法求解。AC代码采用BFS遍历状态,记录每个状态的最小倒水量,最终输出最优解。关键点在于状态转移时正确处理倒水操作,并动态更新最优解。该问题展示了如何将经典倒水问题转化为图论中的最短路问题求解。
2025-09-17 13:25:03
645
原创 UVa1063/LA3807 The Rotation Game
题目描述一个"#"形棋盘上有8个1、2、3,通过A-H方向的旋转操作使中间8个方格数字相同。要求旋转次数最少且操作序列字典序最小。解法包括两种:1) IDA*算法,使用启发式函数计算所需最少步数;2) 分3次BFS,分别将中间数字设为1/2/3进行搜索。IDA*实现更高效,直接通过状态评估剪枝,而BFS方法则通过状态压缩减少搜索空间。两种方法都能正确求解,但IDA*性能更优。
2025-09-12 18:26:12
513
原创 UVa1063/LA3807 Marble Game
本文介绍了UVa1063/LA3807滚球游戏问题的解法。题目要求在一个n×n网格棋盘上,通过倾斜棋盘让m个小球滚入对应编号的洞中。每个方向倾斜后,所有球会同时滚动直到遇到墙、洞或其他球。解决方法采用广度优先搜索模拟游戏过程,记录棋盘状态和移动步数,直到找到解或判定无解。代码实现了状态压缩、方向移动判断和终点检测等功能,能处理2≤n≤4的棋盘情况。对于每组测试数据,输出最小移动次数或"impossible"表示无解。
2025-09-10 16:45:12
408
原创 UVa1302/LA2417 Gnome Tetravex
Gnome Tetravex来自2001年ICPC亚洲区域赛上海赛区,是一个关于拼图的算法问题。给定n×n张卡片,每张卡片四个三角形分别标有数字,要求将这些卡片排列成方阵,使得相邻卡片的相邻三角形数字相同。解题思路采用启发式搜索,通过弱化问题条件设计启发式函数,再利用DFS进行搜索。代码实现了这一算法,通过统计未匹配三角形数量来剪枝优化。对于每组测试数据,输出是否能完成拼图的结果。
2025-09-09 14:51:22
1067
原创 嵌套和分块数据结构、数据结构的灵活运用
本文介绍了嵌套和分块数据结构在算法问题中的应用,重点讲解了CDQ分治和k-D Tree两种方法。CDQ分治通过分治处理多维偏序问题,如三维偏序模板题,结合排序和树状数组高效求解。k-D Tree则用于处理空间最近邻查询问题,如曼哈顿距离查询和帽子悬挂问题。此外,二维线段树在坐标变换后能优化区间查询问题。这些方法通过灵活组合数据结构,显著提升了复杂问题的求解效率。
2025-09-04 01:19:47
467
原创 UVa12312 Bounding Volume Hierarchy
本文介绍了UVa12312 Bounding Volume Hierarchy(BVH)问题的解法。题目要求构建三维BVH树结构,用于加速射线-三角形相交查询,找出与给定射线相交且距离起点最近的三角形。BVH的构建方法包括按最宽维度排序物体并递归分组,或基于中点划分平面。关键点在于输入数据为浮点数而非整数,容易导致错误。AC代码通过构建BVH树并实现射线与包围盒的相交检测来解决该问题,最终输出满足条件的最近交点。
2025-09-04 01:14:31
907
原创 UVa1106/LA5133 Machine Works
本文研究了ICPC 2011世界总决赛F题“Machine Works”,提出了基于线段树优化的动态规划解法。题目要求在限定时间内通过购买和出售机器获得最大利润,需要考虑机器购买时间、价格、残值和日利润等约束条件。关键思路是将问题转化为动态规划,通过维护一个下凸函数来优化状态转移。使用线段树区间查询和修改,结合二分查找确定最优区间,实现了O(n log²n)的时间复杂度。代码实现了机器排序、线段树查询与更新、二分查找等核心功能,成功解决了大规模数据下的最优化问题。
2025-09-02 10:39:53
863
原创 UVa1490/LA5106 Let the lights guide us
本题要求在网格中选择每行一个灯塔位置,满足相邻行灯塔的水平距离不超过魔法值之和,并最小化总费用。通过动态规划结合树状数组优化,将转移条件转化为离散化处理的前缀最值问题,实现时间复杂度为O(mn log m)的高效解法。代码使用滚动数组和离散化处理,有效降低了空间和时间复杂度,最终求得最小总费用。
2025-08-29 10:57:48
877
原创 UVa11607 Cutting Cakes
题目要求在平面上给定n个点和m条直线,对每条直线统计其两侧点数(p≤q)和穿过点数r。由于数据规模较大(n≤1500,m≤700000),直接枚举会超时。采用分块法或四叉树优化:将点集划分为8×8块,每块预处理点集的最小/最大坐标,利用向量叉积快速判断直线与块的位置关系,从而减少计算量。四叉树则通过递归划分象限,利用有向面积分类统计。最终在O(1)或O(log n)时间内处理每条直线,满足6s时限要求。代码实现了分块法,通过预处理和分块查询高效解决问题。
2025-08-27 23:23:36
773
原创 UVa1472/LA4980 Hanging Hats
本文分析了UVa1472/LA4980 Hanging Hats问题,涉及n顶帽子按特定规则悬挂后计算可见数量的算法。通过将问题转化为二维区间查询,提出使用四叉树结构优化查询效率的解法。输入包含帽子坐标和类型(宽/窄),输出每顶帽子悬挂后的可见数或失败标记。最终AC代码实现了O(n log n)时间复杂度的四叉树解法,并指出官方最优解建议使用优先查找树。
2025-08-22 23:40:44
1067
原创 UVa1465/LA4841 Searchlights
本文解决了一个关于网格探照灯覆盖的难题。题目要求在n×m的网格中,选择部分探照灯并设置相同亮度,使所有格子被监控,同时最小化亮度值。解法采用加权并查集,将探照灯按亮度排序后逐步合并相邻元素,通过判断水平/垂直方向集合的覆盖情况来更新最小亮度值。若无法满足条件则输出"NO ANSWER!"。算法巧妙地将二维覆盖问题转化为一维区间覆盖问题,利用并查集高效维护覆盖范围,最终得出最优解。
2025-08-15 12:24:15
814
原创 UVa12345 Dynamic len(set(a[L:R]))
UVa12345要求处理一个动态数组的两种操作:查询区间[L,R)内不同元素个数(Q L R)和修改指定位置元素值(M X Y)。使用分块算法,通过维护前驱数组p、后继数组nxt和排序后的块内数组pre、b,实现查询和修改操作的时间复杂度均为O(√n log√n)。初始建块复杂度O(n log√n),总复杂度O((n+m√n)log√n)。该算法通过二分查找和插入排序优化各操作,适用于大规模数据。
2025-08-11 02:03:15
1176
原创 UVa12389/LA5821 Cybercrime Donut Investigation
求解多个目标点与参考点集的曼哈顿距离最小值问题。输入包含n个参考点和q个目标点坐标,要求输出各目标点到最近参考点的曼哈顿距离。 分析部分提出两种解法: k-D Tree方法:通过构建空间划分树,利用子树边界信息剪枝,平均时间复杂度约为O(√n) 树状数组方法:将坐标变换后分类讨论,利用四个象限分别处理,通过树状数组维护极值,时间复杂度O(n log n) 给出两种实现的AC代码: k-D Tree版本通过递归查询子树边界 树状数组版本通过坐标变换和分象限处理
2025-08-10 00:20:36
930
原创 UVa1383/LA3699 Harmony Forever
题目要求设计一个数据结构,维护一个初始为空的集合S,支持两种操作:1) B X将X加入集合;2) A Y查询除以Y余数最小的数(若多个则取最后加入的)。通过分析,可采用线段树结合阈值策略优化查询:当Y较小时直接遍历集合,较大时利用线段树分区间查询。代码实现了该思路,使用线段树维护集合元素,并处理多组测试数据。输入包含指令序列,输出对应查询结果,确保高效处理大规模数据(1≤X,Y≤500,000)。
2025-08-05 17:36:35
633
UVa1318/LA2797 Monster Trap 用python写的画图可视化分析数据的脚本
2024-01-19
UVa1318/LA2797 Monster Trap 《训练指南》习题源码
2024-01-19
UVa1308/LA2572 Viva Confetti 用python写的画图可视化分析数据的脚本
2024-01-12
(394页)AMiner-2019人工智能发展报告-191201.pdf
2020-04-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅