路径规划问题

来源:互联网 发布:大阪 知乎 编辑:程序博客网 时间:2024/06/06 00:38

学习语言真的是件很痛苦的事,入门感觉很简单,写个hello world 很简单,但是想解决点东西,真的是太难了,于是楼主想针对已知问题,去看别人的代码,看看别人是怎么想的,学会了别人的方法再扒光别人的代码,多扒扒,多练练就可以学会了。上篇路径规划问题是图里面一个很麻烦的东西,博主搞了看了比较多的文章还是稍微有点收获的。

上面是个路径规划问题,起点S,终点E,必须经过点N7,N12,必须经过边(N2,N4),(N14,N13),不能经过边(N11,N12),边上的数字就是距离。问如何走使得路径最短。


之前说过这个单源的无向加权路径问题需要用dijkstra方法,其实就是根据起点开始一圈一圈的向外访问将路径的和加权至每个节点,遇到重叠点就开始比较大小。但是本体有很多约束,譬如过某点,过某条路径,如果从结果中再次塞选符合这些约束的路径应该会大量浪费时间。看了其他人的决绝办法是,先将这些约束进行排序,每条边其实就是路径上相邻的两个点,对这些点排序得到的几种路径分成很多小段,判断自己定义小路径两个点是否相连,若相连就直接等于权值,否则需要对每一小段进行dijkstra路径搜索。

将路径的加权和得出将结果。


因为代码不是原创,博主就不复制粘贴别人的了,等着博主再次看看什么其他的解决办法模型,自己编个程序再贴上来。博主总结这次代码中所学到的c++的收获


map  ,  set   , pair   ,这几个东西很像,map和set就是一对一映射,他们有个mutlimap,multiset ,就是一对多映射,map可以不同类型的映射,set只能相同类型映射,一看到这里楼主想到了嘻哈表 hash  ,没记错也是这样的,pair可以储存成map或者set的一个数据。对了 < vector <vector <int>>则类似一个二维数组,但是他的功能绝对不是数组可以媲美的,不好了楼下的大爷上来催了,不写了下次继续分享。