【问题标题】:Shortest path for gigantic maze (HUGE)巨大迷宫的最短路径(HUGE)
【发布时间】:2013-11-28 13:22:19
【问题描述】:

我需要解决一个最短路径算法问题(用 C 语言)。

基本上,我得到一个文件,其中包含(稀疏)矩阵的总行数和列数、非零条目的数量(称为门)以及最后这些条目的位置和值(行、列、值)。在这个迷宫中,我必须找出从条目 (0,0) 到任何其他点的“最便宜”路径(位置也从文件中读取)。每次我穿过一扇门时,成本都会增加,而为 0 的单元格不会花费任何成本。

有一些规则,例如您不能连续通过两个或多个门,并且某些值为 -1 的门不能通过。最后,我必须打印我通过的门的位置(文件中给出的那些)。我越过多少个空单元格并不重要。

无论如何,这里的问题是矩阵可以是 10⁵*10⁵ 或更多...我将非零条目存储在所谓的稀疏矩阵中,我猜它可以工作:

typedef struct node {
    struct node* down; 
    struct node* right; 

    long int PL, PC, PV;
}node ;

typedef struct _Mat{
    long int NL, NC,P,x,y; //Number of lines,columns,non zero cells, and position of destination
    node** rowList; 
    node** colList;         
}Mat

问题是我无法弄清楚下一步该做什么。仅凭这种结构,我认为我无法解决迷宫。

我应该创建一个矩阵图(包括零点),以便之后我可以应用像 DiJkstras 这样的算法吗?我认为这必须通过图表来解决,但图表会很大......其他想法是将一大群非零单元分组,这些单元以一些门为界,并认为它们是唯一的一个节点。这种方式图表更小,但我不知道如何做到这一点。

如果这是最好的解决方案,我该如何实施?还是我完全错了?我的数据结构没用吗?

【问题讨论】:

标签: c matrix shortest-path sparse-matrix maze


【解决方案1】:

也许 A* 可以帮助你:

http://www.policyalmanac.org/games/aStarTutorial.htm

此算法可以在图中找到最佳路径,您可以将迷宫转换为该路径。

【讨论】:

  • 感谢您的信息。所以在这种特殊情况下,A* 会比 Dijktras 更合适(考虑到一个巨大的矩阵)?
  • 是的,比较合适。 A* 是 Dijstra 的推广。有一个启发式搜索指南可以显着加快算法速度。
猜你喜欢
  • 2018-03-24
  • 1970-01-01
  • 1970-01-01
  • 2012-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多