我需要解决最短路径算法问题(在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这样的算法吗?我认为这必须通过图形来解决,但图形将是巨大的......其他意识形态是将一大群非零单元组合在一起,并将它们视为一个节点。这种方式图较小但我不知道如何做到这一点。
如果这是最佳解决方案,我该如何实施呢?还是我完全错了?我的数据结构没用吗?
答案 0 :(得分:0)