HDOJ 1010

#include <stdio.h>

char v[8][8];
int ci,cj,ct;
int n,m,t;

int dfs()
{
	if(ci < 0 || cj < 0 || ci >= n || cj >= m)
		return 0;
	if(v[ci][cj] == 2)
		if(ct == t)
			return 1;
		else
			return 0;
	else if(v[ci][cj]) {
		ct++;
		v[ci][cj] = 0;
		ci++;
		if(dfs())
			return 1;
		ci--;
		ci--;
		if(dfs())
			return 1;
		ci++;
		cj++;
		if(dfs())
			return 1;
		cj--;
		cj--;
		if(dfs())
			return 1;
		cj++;
		v[ci][cj] = 1;
		ct--;
	}
	return 0;
}

int main()
{
	char c;
	int i,j,d;
	
	while(scanf("%d%d%d",&n,&m,&t),n | m | t) {
		for(i = 0;i < n;i++)
			for(j = 0;j < m;j++) {
				scanf(" %c",&c);
				v[i][j] = 0;
				switch(c) {
				case 'S':
					ci = i;
					cj = j;
				case '.':
					v[i][j] = 1;
					break;
				case 'D':
					d = i + j;
					v[i][j] = 2;
				}
			}
		if((d = d - ci - cj) < 0)
			d = -d;
		if(d > t || (d + t) & 1)
			puts("NO");
		else {
			ct = 0;
			puts(dfs()? "YES": "NO");
		}
	}
	return 0;
}

### LIO-SAMEVO的集成及使用 #### 安装依赖项 为了成功运行LIO-SAM并评估其性能,需先满足一系列前置条件。这包括但不限于ROS系统的配置以及必要的软件包安装[^1]。 对于Ubuntu 18.04系统而言,推荐按照官方指南完成ROS Melodic版本的部署。确保已正确设置工作空间,并通过`catkin_make`编译命令构建项目结构。 ```bash sudo apt-get update && sudo apt-get install ros-melodic-desktop-full python-catkin-tools source /opt/ros/melodic/setup.bash mkdir -p ~/catkin_ws/src && cd ~/catkin_ws/ catkin init; catkin config --extend /opt/ros/melodic ``` #### 下载编译LIO-SAM源码 获取最新版LIO-SAM仓库后,在本地环境中进行编译操作: ```bash cd ~/catkin_ws/src git clone https://github.com/TixiaoShan/LIO-SAM.git cd .. catkin build source devel/setup.bash ``` #### 配置EVO工具用于轨迹对比分析 EVO是一个强大的开源库,专门设计用来处理SLAM/LOAM类算法的结果验证。要利用此工具来评测LIO-SAM的表现,则需要单独下载evo-py模块作为Python接口的一部分[^2]。 可以通过pip直接安装该库: ```bash pip3 install evo==1.2.7 ``` #### 执行实验并导出数据文件 启动LIO-SAM节点之前,请确认已经准备好合适的传感器输入流(如激光雷达LiDAR)。通常情况下,这些设备会连接至计算机并通过特定驱动程序提供话题发布服务。假设一切正常运作,可以尝试播放预录好的bag文件来进行离线回放测试。 ```bash roslaunch lio_sam run.launch rosbag play your_dataset.bag ``` 当仿真结束之后,应当保存下位机所记录下来的路径信息以便后续审查。一般采用topic_to_csv.py脚本实现这一目标,它能够把指定的话题转换成CSV格式存储起来供第三方应用程序读取解析。 ```python import rosbag from tf.transformations import euler_from_quaternion import csv def bag_to_csv(bag_file, output_file): with open(output_file, 'w') as f: writer = csv.writer(f) for topic, msg, t in rosbag.Bag(bag_file).read_messages(topics=['/odom']): quaternion = ( msg.pose.pose.orientation.x, msg.pose.pose.orientation.y, msg.pose.pose.orientation.z, msg.pose.pose.orientation.w) angles = euler_from_quaternion(quaternion) writer.writerow([msg.header.stamp.to_sec(), msg.pose.pose.position.x, msg.pose.pose.position.y, msg.pose.pose.position.z, *angles]) if __name__ == '__main__': bag_to_csv('your_output.bag', 'trajectory.csv') ``` #### 结果可视化展示 最后一步便是借助于EVO提供的API函数绘制图表直观呈现两组或多组不同条件下获得的数据差异之处。下面给出了一段简单的例子说明如何加载先前准备完毕的csv文档进而生成相应的统计图形界面。 ```python import matplotlib.pyplot as plt from evo.core import sync, metrics from evo.tools import file_interface from evo.tools.plot import plot_trajectory traj_ref = file_interface.read_tum_trajectory_file("ground_truth.csv") traj_est = file_interface.read_tum_trajectory_file("trajectory.csv") pose_relation = metrics.PoseRelation.translation_part ape_metric = metrics.APE(pose_relation) data = (traj_ref, traj_est) synced_data = sync.sync_trajectories(data) aligned_traj_est = synced_data[1].align_origin(synced_data[0]) result = ape_metric.process_data((synced_data[0], aligned_traj_est)) plot_trajectory(plt.gca(), pose_relation, result, trail=5) plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值