参考

基于知乎文章https://zhuanlan.zhihu.com/p/51112799

codes

#include <iostream>
#include <deque>
#include <vector>#include <limits.h>using namespace std;int main(int argc, char *args[])
{#define COL_SIZE 6#define ROW_SIZE 6int map[COL_SIZE][ROW_SIZE];for(int col=0; col<COL_SIZE; col++){for(int row=0; row<ROW_SIZE; row++)map[col][row] = INT_MAX;}map[0][0] = 0;map[0][1] = INT_MAX;map[0][2] = 10;map[0][3] = INT_MAX;map[0][4] = 30;map[0][5] = 100;map[1][0] = INT_MAX;map[1][1] = 0;map[1][2] = 5;map[1][3] = INT_MAX;map[1][4] = INT_MAX;map[1][5] = INT_MAX;map[2][0] = INT_MAX;map[2][1] = INT_MAX;map[2][2] = 0;map[2][3] = 50;map[2][4] = INT_MAX;map[2][5] = INT_MAX;map[3][0] = INT_MAX;map[3][1] = INT_MAX;map[3][2] = INT_MAX;map[3][3] = 0;map[3][4] = INT_MAX;map[3][5] = 10;map[4][0] = INT_MAX;map[4][1] = INT_MAX;map[4][2] = INT_MAX;map[4][3] = 20;map[4][4] = 0;map[4][5] = 60;map[5][0] = INT_MAX;map[5][1] = INT_MAX;map[5][2] = INT_MAX;map[5][3] = INT_MAX;map[5][4] = INT_MAX;map[5][5] = 0;int start_index = 0; //from whereint dist_min[ROW_SIZE]; //save dist min from source to others.for(int row=0; row<ROW_SIZE; row++){dist_min[row] = map[start_index][row];}std::deque<std::vector<int> > route;for(int index=0; index<ROW_SIZE; index++ ){route.emplace_back();auto &back = route.back();back.push_back(start_index);back.push_back(index);}std::cout << "start route :" <<  std::endl;auto print_route = [&](){std::cout <<"--------------------------------------------------" << std::endl;for(auto &r : route){std::cout << "get: ";for(auto &s : r){std::cout << " " << s;}std::cout << std::endl;}std::cout <<"--------------------------------------------------" << std::endl;};print_route();std::deque<int> t_set;t_set.push_back(start_index);std::cout << "start dist min array:" << " "  << dist_min[0]<< " "  << dist_min[1]<< " "  << dist_min[2]<< " "  << dist_min[3]<< " "  << dist_min[4]<< " "  << dist_min[5]<< std::endl;while(t_set.size() < ROW_SIZE){//find_left_min_valueint next_t_node = -1;for(int index=0; index<ROW_SIZE; index++){bool find_loop=false;for(auto &val : t_set){if(val == index){find_loop=true;break;}}if(find_loop == false){if(next_t_node == -1){next_t_node = index;}else{//find current min indexif(dist_min[next_t_node] > dist_min[index]){next_t_node = index;}}}}if(next_t_node == -1){std::cout << "cannot find next t node " << std::endl;break;}std::cout << "find next t node index=" << next_t_node << std::endl;t_set.push_back(next_t_node);for(auto &t:t_set)std::cout << " " << t ;std::cout << std::endl;auto &one_route_node = route.at(next_t_node);//one_route_node.push_back(next_t_node);print_route();int prev_weight = 0;auto iter = one_route_node.begin();auto iter_end = one_route_node.end();for(;iter!=iter_end; ){auto iter_next = iter+1;if(iter_next == iter_end)break;if(map[*iter][*iter_next] == INT_MAX) //not reach{prev_weight = INT_MAX;break;}elseprev_weight += map[*iter][*iter_next];iter++;}if(prev_weight == INT_MAX){std::cout << "cur path not reach, continue " << std::endl; continue;}//update dist min arrayfor(int row=0; row<ROW_SIZE; row++){bool find_loop=false;for(auto &val : t_set){if(val == row){find_loop=true;break;}}if(find_loop == false){if((map[next_t_node][row] != INT_MAX ) && (prev_weight + map[next_t_node][row]) < dist_min[row]){dist_min[row] = prev_weight + map[next_t_node][row];auto &target_one_route_node = route.at(row);target_one_route_node = route.at(next_t_node);target_one_route_node.push_back(row);std::cout << "update dist min index=" << row << " to new value=" << dist_min[row] << std::endl;}}}std::cout << "dist min array:" << " "  << dist_min[0]<< " "  << dist_min[1]<< " "  << dist_min[2]<< " "  << dist_min[3]<< " "  << dist_min[4]<< " "  << dist_min[5]<< std::endl;print_route();}std::cout << "last dist min array:" << " "  << dist_min[0]<< " "  << dist_min[1]<< " "  << dist_min[2]<< " "  << dist_min[3]<< " "  << dist_min[4]<< " "  << dist_min[5]<< std::endl;
}

dijkstra 路径搜索算法的c++简单实现相关推荐

  1. Python 图_系列之基于邻接矩阵实现广度、深度优先路径搜索算法

    图是一种抽象数据结构,本质和树结构是一样的. 图与树相比较,图具有封闭性,可以把树结构看成是图结构的前生.在树结构中,如果把兄弟节点之间或子节点之间横向连接,便构建成一个图. 树适合描述从上向下的一对 ...

  2. rrt算法流程图_基于采样的路径搜索算法代码实现(RRT和PRM)

    1.采样法 利用网格法可以得到对特定离散化后C-space的最优解.但网格法的缺点是计算复杂度高,适用于自由度较低的机器人.本文简要介绍另一种基于采样的规划器,它涉及以下函数,通过这些函数构建一个图( ...

  3. c语言a 寻路算法,JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例

    本文实例讲述了JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法.分享给大家供大家参考,具体如下: 完整实例代码如下: A*寻路算法 #stage { border: 1px solid lig ...

  4. 【CCCC】L3-007 天梯地图 (30分),两次Dijkstra+路径打印(数据点2,4错因),90行最短题解

    problem L3-007 天梯地图 (30分) 本题要求你实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线:一条是最短距离的路线.题目保证 ...

  5. Dijkstra 路径规划算法在二维仿真环境中的应用 -- Python代码实现

    在上一节中,介绍了 Dijkstra 算法的原理以及在图中的应用,这一节将一步步实现 Dijkstra 路径规划算法在二维环境中的路径规划,来进一步加深对 Dijkstra 算法的理解. 所需要用到的 ...

  6. LPA* 路径搜索算法介绍及完整代码

    1.简介 LPA*算法(全称Lifelong Planning A*算法)是由Koenig和Likhachev在2004年提出的,是一种参考人工智能的增量搜索进行改进的A*算法.它被用来处理动态环境下 ...

  7. 启发式路径搜索算法介绍

    作者丨Arwin(Haowen Yu) 来源丨古月居 前言 启发式搜索(Heuristically Search)又称为有信息搜索(Informed Search),它是利用问题拥有的启发信息来引导搜 ...

  8. Dijkstra 路径规划算法原理详解及 Python 代码实现

    荷兰数学家 E.W.Dijkstra 于 1959 年提出了 Dijkstra 算法,它是一种适用于 非负权值 网络的 单源最短路径算法,同时也是目前求解最短路径问题的理论上最完备.应用最广的经典算法 ...

  9. [置顶] 游戏开发技术总结(经典之作)第八集 脚踏实地-----游戏角色自动寻路、路径搜索算法...

    8-1 任务 让游戏的角色能够自动寻路: 并让所有的动物都动起来.另外我们在这一章将介 绍图形光标技术. 8-2 设置障碍 8-2-1 场景中的障碍点 游戏中加入了山石.树木场景后,就应该有对游戏角色 ...

  10. 路径搜索算法 python实现_A*算法在栅格地图上的路径搜索(python实现)

    作者:邬杨明 1 import numpy2 from pylab import * 3 4 # 定义一个含有障碍物的20×20的栅格地图5 # 10表示可通行点6 # 0表示障碍物7 # 7表示起点 ...

最新文章

  1. 酷派奖励程序员10 万股期权!因代码贡献受 Linux 之父亲自点名赞赏
  2. 科大奥锐思考题_科大奥锐光电效应测普朗克常数
  3. 网站使用QQ登录问题小结
  4. Samba安装配置用于虚拟机共享文件_很详细
  5. Error while compiling statement: FAILED: LockException [Error 10280]
  6. Java 解决跨域问题
  7. 运用OpenMP提速图像处理速度
  8. 使用wordpress_为什么我使用WordPress进行教育
  9. python大型项目教程_在大型项目开发上,python真是个“烂语言”吗?
  10. 【MySQL】MySQL 8 Show innodb status 命令改变
  11. python实现项目的复制_python实现复制大量文件功能
  12. 云服务器obs_华为云服务器ECS挂载对象存储服务OBS教程
  13. visio 2016的使用
  14. 电池SOH仿真系列-基于LSTM神经网络的电池SOH估算方法
  15. 移远 BC95 海思 NBIOT 物联网模块 规格 手册 说明
  16. oracle oem登录xdb,XDB sys_nc_oid$递归调用的案例一则
  17. 金融风控之贷款违约预测
  18. 杨立昆最新访谈:AI威胁论是蒙昧主义,控制欲只有人才有 (全文+视频)
  19. 爬虫实战-肯德基kfc门店地址实战
  20. 创新与赛道定义 ——产品定义和建立赛道是个技术活

热门文章

  1. 历年系统架构设计师考试之设计模式试题-2012年
  2. 分号(;)和逗号(,)的用法
  3. c语言对文本霍夫曼编码,C语言之霍夫曼编码学习
  4. Android 中的 ClassLoader 摘抄笔记
  5. 功率放大电路工作状态
  6. 使用 IDEA 的阿里插件扫描出的问题的级别
  7. 卖“生活方式”,还会是新式茶饮们的破局点吗?
  8. 什么是请求报文和响应报文?
  9. excel 柱状图 多个水滴图组合
  10. mov转换成mp4,mov转mp4方法