*寒假水95——一个人的旅行

本文介绍了一个帮助选择最佳旅行目的地的算法实现。通过输入不同城市间的距离和候选目的地,该算法能够计算出从当前位置出发到达心仪地点所需的最短时间。

 

虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。

Input输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个; 
 接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路) 
接着的第T+1行有S个数,表示和草儿家相连的城市; 
 接着的第T+2行有D个数,表示草儿想去地方。Output输出草儿能去某个喜欢的城市的最短时间。Sample Input

6 2 3
1 3 5
1 4 7
2 8 12
3 8 4
4 9 12
9 10 2
1 2
8 9 10

Sample Output

9

 

#include<iostream>
using namespace std;
int map[1002][1002];
int set[1002];
int want[1002];
int  dist[1002];
const int N=1002;
void Dijist(int s,int g[][N],int n)
{
  int set[N];
  int i,j,min,pos;
  for(i=0;i<n;i++)
  {
  dist[i]=g[s][i];
  set[i]=1;
  }
    set[s]=0;//头结点已被访问
    for(i=1;i<n;i++)//n-1次遍历余下的n-1个结点
    {
    min=10000;
    for(j=0;j<n;j++)
    {
      if(set[j]&&(dist[j]<min))
      {
      pos=j;
      min=dist[j];

      }
    }
    set[pos]=0;
    for(j=0;j<n;j++)
        if(set[j]&&(dist[pos]+g[pos][j]<dist[j]))//更新
         dist[j]=dist[pos]+g[pos][j];
    }


}
int main()
{
  int T,S,D;
  while(cin>>T>>S>>D)
  {
      memset(map,10000,sizeof(map));
     int i,p,q,k,h,time;
     for(i=0;i<1002;i++)
         for(k=0;k<1002;k++)
             map[i][k]=2000;
     for(i=0;i<T;i++)
     {
         cin>>p>>q>>time;
         if(time<map[p][q])//可能有多条路,取最小的路
         {
            map[p][q]=time;
         map[q][p]=time;
           
         }
     }
     for(i=0;i<S;i++)//与相邻的城市的距离直接设为0
     {    
           cin>>p;
         map[0][p]=0;
    
     }
     int wantto=0;
     for(i=0;i<D;i++)
     {
        cin>>want[i];//想去的城市
        wantto++;
     }
      Dijist(0,map,1002);
       int min=10000;
      for(i=0;i<wantto;i++)//找出最小的时间
      {
        if(min>dist[want[i]])
            min=dist[want[i]];
      }
    cout<<min<<endl;
  }
  return 0;
}

题解:在想去的城市里,找相邻车程最短的,优先到达。

同步定位与地图构建(SLAM)技术为移动机器或自主载具在未知空间中的导航提供了核心支撑。借助该技术,机器能够在探索过程中实时构建环境地图并确定自身位置。典型的SLAM流程涵盖传感器数据采集、数据处理、状态估计及地图生成等环节,其核心挑战在于有效处理定位与环境建模中的各类不确定性。 Matlab作为工程计算与数据可视化领域广泛应用的数学软件,具备丰富的内置函数与专用工具箱,尤其适用于算法开发与仿真验证。在SLAM研究方面,Matlab可用于模拟传感器输出、实现定位建图算法,并进行系统性能评估。其仿真环境能显著降低实验成本,加速算法开发与验证周期。 本次“SLAM-基于Matlab的同步定位与建图仿真实践项目”通过Matlab平台完整再现了SLAM的关键流程,包括数据采集、滤波估计、特征提取、数据关联与地图更新等核心模块。该项目不仅呈现了SLAM技术的实际应用场景,更为机器导航与自主移动领域的研究员提供了系统的实践参考。 项目涉及的核心技术要点主要包括:传感器模型(如激光雷达与视觉传感器)的建立与应用、特征匹配与数据关联方法、滤波器设计(如扩展卡尔曼滤波与粒子滤波)、图优化框架(如GTSAM与Ceres Solver)以及路径规划与避障策略。通过项目实践,参与者可深入掌握SLAM算法的实现原理,并提升相关算法的设计与调试能力。 该项目同时注重理论向工程实践的转化,为机器技术领域的学习者提供了宝贵的实操经验。Matlab仿真环境将复杂的技术问题可视化与可操作化,显著降低了学习门槛,提升了学习效率与质量。 实践过程中,学习者将直面SLAM技术在实际应用中遇到的典型问题,包括传感器误差补偿、动态环境下的建图定位挑战以及计算资源优化等。这些问题的解决对推动SLAM技术的产业化应用具有重要价值。 SLAM技术在工业自动化、服务机器、自动驾驶及无机等领域的应用前景广阔。掌握该项技术不仅有助于提升个专业能力,也为相关行业的技术发展提供了重要支撑。随着技术进步与应用场景的持续拓展,SLAM技术的重要性将日益凸显。 本实践项目作为综合性学习资源,为机器技术领域的专业员提供了深入研习SLAM技术的实践平台。通过Matlab这一高效工具,参与者能够直观理解SLAM的实现过程,掌握关键算法,并将理论知识系统应用于实际工程问题的解决之中。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值