【发布时间】: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 这样的算法吗?我认为这必须通过图表来解决,但图表会很大......其他想法是将一大群非零单元分组,这些单元以一些门为界,并认为它们是唯一的一个节点。这种方式图表更小,但我不知道如何做到这一点。
如果这是最好的解决方案,我该如何实施?还是我完全错了?我的数据结构没用吗?
【问题讨论】:
-
我认为 OPs 问题是为稀疏矩阵而不是图实现这一点。
标签: c matrix shortest-path sparse-matrix maze