我需要解決一個最短路徑算法問題(在C中)。巨大迷宮的最短路徑(巨大)
基本上我給了一個文件,其中包含一個(稀疏)矩陣的行和列的總數,非零條目的數目(稱爲門),最後這些條目的位置和值(行,列,值)。在這個迷宮中,我必須找出從條目(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算法?我認爲這必須通過圖表來解決,但圖表將會非常龐大......其他理念是將一大羣非零單元組合在一起,並將它們視爲一個節點。這種方式圖形較小,但我不知道如何做到這一點。
如果這是最好的解決方案,我該如何實現它?還是我完全錯了?我的數據結構是無用的嗎?
你做了什麼研究嗎? http://en.wikipedia.org/wiki/Maze_solving_algorithm – ravenspoint
我認爲OPs問題是實現這個稀疏矩陣,而不是圖。 – Mailerdaimon