导航:首页 > 源码编译 > 公交车最短路径搜寻算法

公交车最短路径搜寻算法

发布时间:2022-06-20 12:56:29

A. 如何使用深度优先搜索、广度优先搜索和迭代搜索算法来解决城市最短路径问题

若需对vector, string, deque, 或 array容器进行全排序,你可选择sort或stable_sort;

若只需对vector, string, deque, 或 array容器中取得top n的元素,部分排序partial_sort是首选.

若对于vector, string, deque, 或array容器,你需要找到第n个位置的元素或者你需要得到top n且不关系top n中的内部顺序,nth_element是最理想的;

若你需要从标准序列容器或者array中把满足某个条件或者不满足某个条件的元素分开,你最好使用partition或stable_partition;

若使用的list容器,你可以直接使用partition和stable_partition算法,你可以使用list::sort代替sort和stable_sort排序。若你需要得到partial_sort或nth_element的排序效果,你必须间接使用。正如上面介绍的有几种方式可以选择。

B. 地铁最小换乘和最短路线怎么算

最小换乘是根据数据库的。这个算法很简单就是一个递归函数而已。如这里有地铁站A和B。我们要打A->B的最小换乘。第一步:看A所在的每个路线里是否存在B,如A站有线路a,b,检查线路a,b中是否含B,如果含就取出结果。否则进入第二步。;第二步:对A站所在的所有线路的站点进行第一步那样搜索,如a线路第一站为C,则又找C->B的。 就这样不停的递归就行了。。。
有必要说明的是任何算法都要建立在实际的基础上,如果不符合实际再精妙的算法也是不好的。。换乘的法,一般到两次就行了,,换乘次数多了明显是不符合实际的。。所以你不必写出完整的算法,只需单独写出换乘一次,二次的就行了。。很简单的。。

最短路径,我建议建立“图”吧。让每条边的权重为它的长度,然后用图相关的算法就可以实现了。。
我建议先找到二次以内的换乘方案。然后再计算每一次换乘的距离,最终取出路径最小的方案。。如果用上面哪种方法的话,可以得到最短路径,,但可能要换乘很多次,那样也不符合实际.

我刻我当初在做公交查询时就给每个站点和它们之间的路径建立一个网络,,最终分析这个几何网络得到最短路径..可结果很遗憾,,,最短路径是得到了..可是换乘大多..太不符合实际了...

希望能帮到你~~

C. "最短路径优先算法"的优缺点

这个算法一般出现在网络中,用于路由器的路由寻址,我也只了解这方面的优缺点。如果不对,LZ就别看了。
所谓最短路径,实际上说的是跳数。比如从一条路走会经过三个路由器,而从另一条路走,会经过两个路由器,那么此算法会判断2跳比3跳要短,但具体每一跳会花多长时间,经过多长路程,它不会考虑的。所以不一定算法的最短路径就是真实的最短。因为很多因素算法没有考虑,比如通信质量,网线长度……
C语言我只看过一个模拟现实的例子,大概是说公车走什么路线长度最短,那个算法考虑的是路线的长短,而不是跳数,优点当然就是路线的绝对最短,缺点就是没考虑到其他现实因素,比如是否堵车(相当于网络通信质量)之类。
总之不管什么算法,考虑到的因素就是它的优点,反过来说,缺点往往就是算法忽略的因素。
补充一下,如果说的不是算法本身的优劣,而是细节的实现方面,那就是从时间复杂度和空间复杂度两个方面去考虑了,希望对LZ有用。

D. 什么是路径搜索算法

举个例子你大概就明白了,假设从上海东方明珠电视塔到北京天安门有N条线路,可以上海-天津-北京,上海-南京-北京,上海-广州-西藏-北京等等等,选择一条需要的线路这就是路径搜索,用来实现该选择的算法是路径搜索算法,可以选择最短路径,关键路径,如果有费用(权值)就可以选择最便宜路径(权最小),如果有路径需用时(飞机、火车,有些地方只有单一交通工具)就可以选择时间最短路径
用于计算机中的路径搜索就比较广泛了,但大体就是根据上述情况变化来得

E. 如果要寻找两个公交站之间最佳的换乘路径用哪种数据结构比较好

你想的太简单了。
首先,站之间相隔站点最少 不一定就是路径最短。
其次,线路换乘的问题要考虑多条线路交叉选择 绝对不是线性表可以解决的。
用图解决不是理论上的问题,这是一个常识问题。
你这样随口回答人家,除非你补充出你特殊的理由,不然绝对会被人当成门外汉对待的。

F. 求数据结构公交线路咨询的代码用java,其中求最短路径用Floyd算法

不知道你想怎么搞 反正感觉A*算法也可以,网上一大堆,还有就是Dijkstra算法

G. 最短路径算法

Dijkstra算法,A*算法和D*算法

Dijkstra算法是典型最短路算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。Dijkstra算法能得出最短路径的最优解,但由于它遍历计算的节点很多,所以效率低。

Dijkstra算法是很有代表性的最短路算法,在很多专业课程中都作为基本内容有详细的介绍,如数据结构,图论,运筹学等等。

Dijkstra一般的表述通常有两种方式,一种用永久和临时标号方式,一种是用OPEN, CLOSE表方式,Drew为了和下面要介绍的 A* 算法和 D* 算法表述一致,这里均采用OPEN,CLOSE表的方式。

大概过程:
创建两个表,OPEN, CLOSE。
OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
1. 访问路网中里起始点最近且没有被检查过的点,把这个点放入OPEN组中等待检查。
2. 从OPEN表中找出距起始点最近的点,找出这个点的所有子节点,把这个点放到CLOSE表中。
3. 遍历考察这个点的子节点。求出这些子节点距起始点的距离值,放子节点到OPEN表中。
4. 重复2,3,步。直到OPEN表为空,或找到目标点。

提高Dijkstra搜索速度的方法很多,常用的有数据结构采用Binary heap的方法,和用Dijkstra从起始点和终点同时搜索的方法。

A*(A-Star)算法是一种启发式算法,是静态路网中求解最短路最有效的方法。

公式表示为: f(n)=g(n)+h(n),
其中f(n) 是节点n从初始点到目标点的估价函数,
g(n) 是在状态空间中从初始节点到n节点的实际代价,
h(n)是从n到目标节点最佳路径的估计代价。

保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:
估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。
如果 估价值>实际值, 搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
估价值与实际值越接近,估价函数取得就越好。
例如对于几何路网来说,可以取两节点间欧几理德距离(直线距离)做为估价值,即f=g(n)+sqrt((dx-nx)*(dx-nx)+(dy-ny)*(dy-ny));这样估价函数f在g值一定的情况下,会或多或少的受估价值h的制约,节点距目标点近,h值小,f值相对就小,能保证最短路的搜索向终点的方向进行。明显优于Dijstra算法的毫无无方向的向四周搜索。
conditions of heuristic
Optimistic (must be less than or equal to the real cost)
As close to the real cost as possible
主要搜索过程:
创建两个表,OPEN表保存所有已生成而未考察的节点,CLOSED表中记录已访问过的节点。
遍历当前节点的各个节点,将n节点放入CLOSE中,取n节点的子节点X,->算X的估价值->
While(OPEN!=NULL)
{
从OPEN表中取估价值f最小的节点n;
if(n节点==目标节点) break;
else
{
if(X in OPEN) 比较两个X的估价值f //注意是同一个节点的两个不同路径的估价值
if( X的估价值小于OPEN表的估价值 )
更新OPEN表中的估价值; //取最小路径的估价值
if(X in CLOSE) 比较两个X的估价值 //注意是同一个节点的两个不同路径的估价值
if( X的估价值小于CLOSE表的估价值 )
更新CLOSE表中的估价值; 把X节点放入OPEN //取最小路径的估价值
if(X not in both)
求X的估价值;
并将X插入OPEN表中; //还没有排序
}
将n节点插入CLOSE表中;
按照估价值将OPEN表中的节点排序; //实际上是比较OPEN表内节点f的大小,从最小路径的节点向下进行。
}

A*算法和Dijistra算法的区别在于有无估价值,Dijistra算法相当于A*算法中估价值为0的情况。

动态路网,最短路算法 D*A* 在静态路网中非常有效(very efficient for static worlds),但不适于在动态路网,环境如权重等不断变化的动态环境下。

D*是动态A*(D-Star,Dynamic A*) 卡内及梅隆机器人中心的Stentz在1994和1995年两篇文章提出,主要用于机器人探路。是火星探测器采用的寻路算法。

主要方法:
1.先用Dijstra算法从目标节点G向起始节点搜索。储存路网中目标点到各个节点的最短路和该位置到目标点的实际值h,k(k为所有变化h之中最小的值,当前为k=h。每个节点包含上一节点到目标点的最短路信息1(2),2(5),5(4),4(7)。则1到4的最短路为1-2-5-4。
原OPEN和CLOSE中节点信息保存。
2.机器人沿最短路开始移动,在移动的下一节点没有变化时,无需计算,利用上一步Dijstra计算出的最短路信息从出发点向后追述即可,当在Y点探测到下一节点X状态发生改变,如堵塞。机器人首先调整自己在当前位置Y到目标点G的实际值h(Y),h(Y)=X到Y的新权值c(X,Y)+X的原实际值h(X).X为下一节点(到目标点方向Y->X->G),Y是当前点。k值取h值变化前后的最小。
3.用A*或其它算法计算,这里假设用A*算法,遍历Y的子节点,点放入CLOSE,调整Y的子节点a的h值,h(a)=h(Y)+Y到子节点a的权重C(Y,a),比较a点是否存在于OPEN和CLOSE中,方法如下:
while()
{
从OPEN表中取k值最小的节点Y;
遍历Y的子节点a,计算a的h值 h(a)=h(Y)+Y到子节点a的权重C(Y,a)
{
if(a in OPEN) 比较两个a的h值
if( a的h值小于OPEN表a的h值 )
{ 更新OPEN表中a的h值;k值取最小的h值
有未受影响的最短路经存在
break;
}
if(a in CLOSE) 比较两个a的h值 //注意是同一个节点的两个不同路径的估价值
if( a的h值小于CLOSE表的h值 )
{
更新CLOSE表中a的h值; k值取最小的h值;将a节点放入OPEN表
有未受影响的最短路经存在
break;
}
if(a not in both)
将a插入OPEN表中; //还没有排序
}
放Y到CLOSE表;
OPEN表比较k值大小进行排序;
}
机器人利用第一步Dijstra计算出的最短路信息从a点到目标点的最短路经进行。

D*算法在动态环境中寻路非常有效,向目标点移动中,只检查最短路径上下一节点或临近节点的变化情况,如机器人寻路等情况。对于距离远的最短路径上发生的变化,则感觉不太适用。

H. 公交路线查询系统中查询时用到的算法,如最短路径算法,如何用jsp实现呢求各位帮忙!

我有C++的算法
JSP我不懂啊,看看能不能对你有帮助啊,是和JS一样的东西吗
我懂JS,asp.net,C#不知道这里边有没有JSP的东西啊.
下面代码的核心算法在CAL这个函数里面

#include<iostream>
using namespace std;
const int MAX=1000;
const int INF=1000000000;
class SPFA
{
public: int n;//表示图里面的点数

public: int path[MAX][MAX];//定义链接矩阵最多是1000个点

public: int dis[MAX];//定义源点到其他点的距离

public: int src;//定义源点

public:void Cal()
{
int i,j,k;
bool used[MAX]={false};//定义点是否访问过了,初始化为未访问
for(i=0;i<n;i++)//初始化一下到各个点的距离
{
dis[i]=path[src][i];
}
dis[src]=0;
int min_=INF;
for(i=0;i<n;i++)
{
k=-1;
min_=INF;
for(j=0;j<n;j++)
{
if(dis[j]<min_&&!used[j])
{
min_=dis[j];
k=j;
}
}
if(k==-1)//已经找不到有路可走的点
{
return;
}
used[k]=true;
for(j=0;j<n;j++)
{
if(!used[j]&&dis[j]>min_+path[k][j])//如果从k点走到j点的路很比原来的要短,那么更新
{
dis[j]=min_+path[k][j];
}
}
}
}
};

//int _tmain(int argc, _TCHAR* argv[])
int main()
{
//按照下面的数据格式输入,-1表示没有路,自己到自己是0
/*
3
0 -1 -1
3 0 -1
3 4 0

3
0 100 1
3 0 -1
3 4 0

3
0 1 2
3 0 -1
3 4 0
*/

SPFA* a=new SPFA();

cin>>a->n;
int i,j;
for(i=0;i<a->n;i++)
{
for(j=0;j<a->n;j++)
{
//scanf("%d",&a->path[i][j]);
cin>>a->path[i][j];
if(a->path[i][j]==-1)
{
a->path[i][j]=INF;
}
}
}
a->src=0;//源点暂时定为0,你自己改吧
a->Cal();
for(i=0;i<a->n;i++)
{
//printf("dis[%d]=%d\n",i,a->dis[i]);
cout<<"dis";
cout<<"[";
cout<<i;
cout<<"]=";
cout<<a->dis[i];
cout<<"\n";
}
return 0;
}

I. 公交线路最优算法

可以理解,如果某条公交车线路是从A地到E地的最短路径,则其子路也必是最短的。即如果最短路径为A→B→C→D→E,那么C→D→E必是C到E的最短路径。否则用反证法,必可找到一条更短的路线,就与前面矛盾了。最短路径的上述特性,启发我们从终点开始,从后向前逐步递推,求出各站到目的地E的最短子路,最后求出从A站到E站的最短路径。

阅读全文

与公交车最短路径搜寻算法相关的资料

热点内容
安卓项目开发实例附源码 浏览:726
程序员苹果全家桶 浏览:195
远程命令阻塞 浏览:728
有网页源码怎么查数据 浏览:99
win10下make编译速度过慢 浏览:864
微机原理编译环境 浏览:17
怎么把图纸转换成pdf 浏览:539
安卓libcurl编译64 浏览:903
手机app怎么测速 浏览:275
中兴gpon命令 浏览:885
python中取出字典key值 浏览:680
Linux目录inode 浏览:147
手机上如何用文件夹发邮件 浏览:428
畅课app密码忘了怎么找回 浏览:79
怎么编译idea 浏览:231
如何查看服务器是否做了热备 浏览:1001
硬盘同名文件夹病毒 浏览:729
百度云不解压下载 浏览:563
新冠疫情app怎么用 浏览:973
拆二代程序员 浏览:400