老板要我这几天弄出来,跪求高手帮忙,小弟在这谢谢了 ( 积分: 50 )

  • 主题发起人 主题发起人 靴子
  • 开始时间 开始时间

靴子

Unregistered / Unconfirmed
GUEST, unregistred user!
先形象的说个例子:假如A在某一固定的位置开始延道路逃跑,而且他必定是延路走,但是哪个方向不清楚。当我发现他不在的时候已经1个小时,而且也知道这一个小时能够走的距离,假如是100公里。在他逃跑哪个路的位置上,如果向四面八方走的话,而且距逃跑的位置100公里有四条路可能。现在我想在地图上显示出他可能走的这些路径。

我用的是delphi+mapx。

请问大家有什么好的思想或是有这方面的例子。
 
先形象的说个例子:假如A在某一固定的位置开始延道路逃跑,而且他必定是延路走,但是哪个方向不清楚。当我发现他不在的时候已经1个小时,而且也知道这一个小时能够走的距离,假如是100公里。在他逃跑哪个路的位置上,如果向四面八方走的话,而且距逃跑的位置100公里有四条路可能。现在我想在地图上显示出他可能走的这些路径。

我用的是delphi+mapx。

请问大家有什么好的思想或是有这方面的例子。
 
没有高手知道吗?
 
这纯粹是算法问题啊
 
那给指明点思路啊。谢谢
 
这很难吗?分不够我可以在加~~
 
这是一个纯网络遍历的问题,其实比最优路径还要稍微简单一点,因为不要求求出最优解,对吧。

先假设你的路网拓扑已经建立,那么你只要写一个递归函数,参数为一个坐标值,或路网中的一个结点,做为初始条件。以此为起点,在网络中进行遍历搜索,从一条路搜索到端点,再从这个端点,按广度优先(深度优化也行)搜索这个端点的邻接路段,再周而复始...不过,你自己要设计自己的每条路段和结点的加权值,即你要设计一个根据每条道路的路况(宽度、长度、车道数、单双行...)等计算出一个耗时多少的模型(其实就是写一个函数)。当遍历到一定程度,耗时已经大于或等于你的时限(如1个小时),这时,终止当前结点的搜索(不是终止所有的搜索!),递归返回到上一级,即回溯到树的上一级,继续。
...

这样你就可以得到一个选择集,这个选择集就是你要的在某个时间段内从指定一点开始的罪犯可能逃窜的道路网。

如果你对我文中的一些基本概念还不清楚,那么建议你参阅一下《数据结构》,不要再问我。
 
图的遍历
map[5,5] =
{{0,AB,AC,AD,AE},{BA,0,BC,BD,BE},{CA,CB,0,CD,CE}{DA,DB,DC,0,DE}{EA,EB,EC,ED,0}}

采用深度优先方法

VisitMap (int nbegin
)
{
int bVisited[MAX_NODE] = {0};
//0 未遍历 1 己遍历 2 己遍历,选中的节点
static nDistane = 0;
for (int i =0;
i < MAX_NODE
i++)
{
if (!bVisited) continue;
//如果己遍历
nDistane += map[nbegin
,i];
if (nDistane == 100)//100公里
{
bVisited = 2;
}
VisitMap(i);
nDistane -= map[nbegin
,i];
}

}
 
优化一下 如果大于100 直接回溯 不要再试探了
 
首先谢谢吕斑竹,你已经说的很详细了啊。原先我是由于是不是要建立道路的网络拓扑,因为这个太麻烦了,因为现在只有我一个人在开发这块~~~经过你这么一说看来我必须要建立路网拓扑了。
也非常感谢 djh_djh的代码,还要向你请教。

因为没有做过最优路径的程序,所以对于路网的拓扑不太明白。如果有这方面资料的朋友还希望赐教~
 
路网的拓扑 不要搞那么深的概念没必要
像以下就表示了 A B C D E 5个点之间的关系
AB 表示 A 到B之间的路程 可以定义一个很大的数字表示 A 和 B之间是没有直接路线的
{
{0,AB,AC,AD,AE}.
{BA,0,BC,BD,BE},{CA,CB,0,CD,CE}{DA,DB,DC,0,DE}{EA,EB,EC,ED,0}}

只要用一个 矩阵(二维数组就表示了)
 
djh_djh 你有别的联系方式吗?我想向你请教一些问题~`
我的qq29844475
 
在遍历节点(就是线的端点)时,我的起点不是正好是节点,而是在路的不确定的一点,这样遍历是不是应该找最近的一个节点呢?
 
难啊,实现起来太难了啊,一个省有这么多道,而且还把各个市的路加上,简直是天文数字啊,恐怕做出来,应用也是让人受不了的。
 
你如果是用的mapx的话,可以不用这么复杂地。首先,你的道路应该是应该是在一个图层上地,而1个小时的路程也就是你说的100公里也是知道的,还有A点,这样的话可以用mapx的函数设置中心点和搜索半径,这样就可以把一A点为员心,100公里为半径的在次之内的道路features对象集合得到地,然后你在具体把每个道路feature显示即可。有需求的话请联系 QQ :185597150
 
后退
顶部