题目传送门

题目描述

已知了飞行器的起点和终点以及n个休息站的坐标,问起点到终点的最短路径是多少?

限制:飞行器不能长期飞行,必须中途在某结点下停下休息。(即连续飞行距离应不大于m)

欧涛师兄很想在师妹面前大展身手,你能帮助他解决这个问题吗?

输入描述

第一行输入两个数,整数n和浮点数m

第二行输入六个浮点数x1,y1,z1,x2,y2,z2。分别代表起点坐标(x1,y1,z1)和终点坐标(x2,y2,z2)

紧接着下面n行,每行依次输入三个浮点数,代表休息站的坐标(ai,bi,ci),休息站编码依次为1,2……n。

输出描述

输出满足条件的起点到终点的最短距离长度(结果保留三位小数)。

依次输出飞行器经过站台的编码(休息站编码为1到n,起点编码Start,终点编码End)

若不能到达终点输出“-1”(无双引号)

示例

输入
4 5
0 0 0 6 6 0
-1 1 0
5 6 0
3 4 0
6 1 0
输出
8.606
Start 3 End

n<=600

代码如下:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int maxv = 610;
const int inf = 10000000;
double G[maxv][maxv];
double x[maxv],y[maxv],z[maxv];
double d[maxv];
int vis[maxv];
int n;
double m;
int pre[maxv];
void dijketra(){fill(d,d+maxv,inf*1.0);d[0] = 0;for(int i = 0;i <= n+1; i++){pre[i] = i;}for(int i = 0;i <= n+1; i++){int u = -1;double min = inf*1.0;for(int j = 0;j <= n+1; j++){if(!vis[j]&&d[j]<min){u = j;min = d[j];}}if(u==-1) return;vis[u] = 1;for(int v = 0;v <= n+1; v++){if(!vis[v]&&G[u][v]+d[u]<d[v]){d[v] = G[u][v] + d[u];pre[v] = u;}}}
}
void DFS(int s,int v){if(s==v){printf("Start");return;}DFS(s,pre[v]);if(v==n+1){printf(" End");}else{printf(" %d",v);}
}
int main(){scanf("%d%lf",&n,&m);fill(G[0],G[0]+maxv*maxv,inf*1.0);memset(vis,0,sizeof(vis));scanf("%lf%lf%lf",&x[0],&y[0],&z[0]);scanf("%lf%lf%lf",&x[n+1],&y[n+1],&z[n+1]);double tempx,tempy,tempz,temp;for(int i = 1;i <= n; i++)scanf("%lf%lf%lf",&x[i],&y[i],&z[i]);for(int i = 0;i <= n+1; i++){for(int j = 0;j <= n+1; j++){tempx = (x[i]-x[j])*(x[i]-x[j]);tempy = (y[i]-y[j])*(y[i]-y[j]);tempz = (z[i]-z[j])*(z[i]-z[j]);temp = sqrt(tempx+tempy+tempz);if(temp<=m*1.0000001&&i!=j){G[i][j] = G[j][i] = temp;}else if(i==j){G[i][j] = G[j][i] = 0;}}}dijketra();if(d[n+1]==inf*1.0){printf("-1\n");}else{printf("%.3lf\n",d[n+1]);DFS(0,n+1);}system("pause");return 0;
}

最短路径,迪杰斯特拉算法,三维坐标相关推荐

  1. >算法笔记-动态规划-最短路径迪杰斯特拉算法

    算法笔记-动态规划-最短路径迪杰斯特拉算法 作者:星河滚烫兮 前言   图的最短路径问题在现实生活中有很广阔的应用,最短路径又分为单源最短路径与多源最短路径,前者求出固定起点到其他节点的最短路径,后者 ...

  2. 最短路径——迪杰斯特拉算法——图的数据结构

    最短路径是在工程上经常用到的概念,在这里给出了从单源点到任意顶点的迪杰斯特拉算法. 先来看看基本概念: 用代码C语言实现如下: #include<string.h>#include< ...

  3. 最短路径迪杰斯特拉算法--邻接矩阵

    一.算法介绍 迪杰斯特拉算法(解决单源最短路径) 基本思想:每次找到离源点(如1号节点)最近的一个顶点,然后以该顶点为中心进行扩展,最终得到源点到其余所有点的最短路径. 基本步骤:1,设置标记数组bo ...

  4. 别说了,世界那么大我想去看看!(最短路径-迪杰斯特拉算法弗洛伊德算法)

    前言: 一直想去外面的世界看看,中国城市那么多,那么美,怎么样才可以用最少的钱,最短的时间游遍我想去的城市呢?(我在做梦?不不不!迪杰斯特拉算法和弗洛伊德算法来了)      这两个算法有着广泛的用途 ...

  5. 图的最短路径--迪杰斯特拉算法 c语言

    还是按照书上的例子: 完整代码如下: #include <stdio.h> #include <stdlib.h> #include <string.h> #def ...

  6. 校园导游系统(纯C语言实现)最短路径---迪杰斯特拉算法

    西京学院导游系统 学习数据结构+C语言可实现 #include <stdio.h> #include <stdlib.h> #include <conio.h> # ...

  7. 最短路径迪杰斯特拉算法 c语言,Dijkstra第K最短路径算法

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 //运筹学之最短路径 #include #include #define M 99999 int main() { int G[100][100]; in ...

  8. java 点到点最短路径,迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短距离及路径) | 学步园...

    其实不是原创哈,我写不出来. 如何求图中V0到V5的最短路径呢? java实现的方式如下: 第一步,根据图来建立权值矩阵: int[][] W = { {  0,   1,   4,  -1,  -1 ...

  9. L2-001 紧急救援 (25 分)最短路径 迪杰斯特拉算法

    L2-001 紧急救援 题目 代码 题目 L2-001 紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城 ...

  10. (王道408考研数据结构)第六章图-第四节4:最短路径之迪杰斯特拉算法(思想、代码、演示、答题规范)

    文章目录 一:BFS算法局限性 二:迪杰斯特拉(dijkstra)算法基本思想 三:迪杰斯特拉(dijkstra)算法代码实现 四:迪杰斯特拉(dijkstra)算法代码视频演示 五:迪杰斯特拉(di ...

最新文章

  1. 装饰模式(Decorator)
  2. .net采集网页方法大全(5种)
  3. Mozilla新特性只支持https网站
  4. 计算机网络2004(模拟试题),中国矿业大学2003—2004学年(计算机网络)模拟试题 A卷...
  5. Running Builds
  6. 第一次去四川的广东人是什么下场?
  7. H5-geolocation学习
  8. 正面管教php_中联重科团委快乐父母协会第五期正面管教家长基础班招募!
  9. fx5u mc协议_三菱PLC编程入门:FX5U系列常见问题!
  10. 邵阳市工业学校计算机29班,邵阳市南门口大祥区沙子坡文明路11号计算机学校...
  11. python chardet_chardet
  12. [飘渺女声]罗琳娜 麦肯尼(Loreena McKennitt)
  13. winedit自动换行
  14. 【图像处理】.jpg 和 .png
  15. 使用Fiddler对手机App抓包
  16. 签电子合同的流程是怎样的
  17. 摄像机的内参数和外参数
  18. 大数据专业应该怎么学习
  19. 科学计数法和有效数字
  20. Java将对象的属性值合并

热门文章

  1. Passport 之API令牌
  2. Ubuntu快速删除大量小文件方法
  3. 图像处理(二)——图像频域滤波
  4. onmousemove、onmouseover、 onmouseup及onclick的区别
  5. Lenovo G480笔记本安装OS X Mavericks 10.9,升级10.9.1,驱动安装,DSDT修改全过程
  6. 互联网企业安全高级指南读书笔记之网络安全
  7. 【Windows 逆向】CE 地址遍历工具 ( CE 结构剖析工具 | 从内存结构中根据寻址路径查找子弹数据的内存地址 )
  8. 基于实时ETL的日志存储与分析实践
  9. 在layui数据表格中修改数据
  10. c# 字节数组转整型