我的網格
我試圖為上面附加的網格圖實作 Dijkstra 演算法,以找到從源節點到每個其他節點的最短路徑。看了很多教程后,我無法理解我應該如何定義我的起始節點和圖形。
據我了解,網格不會改變演算法/實作的作業方式。在我閱讀/觀看的每個教程中,源代碼始終為“0”。例如我讀到這個:Javatpoint 文章。這是他們的輸入:Javapoint 圖, Javatpoint 驅動程式類。
所以我想知道輸入“圖表”中的行順序是否重要?第一行總是必須是源節點的行嗎?
這是我為我的網格實作驅動程式類的嘗試:
int grph[][] = new int[][] {
//S A B C D E F G H I J K
{ 0,-1,-1, 1,-1,-1, 1, 1,-1,-1, 2,-1 }, // S
{-1, 0, 1,-1,-1, 4,-1,-1,-1,-1,-1,-1 }, // A
{-1, 1, 0, 4,-1,-1, 9,-1,-1,-1,-1,-1 }, // B
{ 1,-1, 4, 0, 3,-1,-1,-1,-1,-1,-1,-1 }, // C
{-1,-1,-1, 3, 0,-1,-1, 8,-1,-1,-1,-1 }, // D
{-1, 4,-1,-1,-1, 0, 2,-1, 2,-1,-1,-1 }, // E
{ 1,-1, 9,-1,-1, 2, 0,-1,-1, 3,-1,-1 }, // F
{ 1,-1,-1,-1, 8,-1,-1, 0,-1,-1,-1, 6 }, // G
{-1,-1,-1,-1,-1, 2,-1,-1, 0, 1,-1,-1 }, // H
{-1,-1,-1,-1,-1,-1, 3,-1, 1, 0, 2,-1 }, // I
{ 2,-1,-1,-1,-1,-1,-1,-1,-1, 2, 0, 2 }, // J
{-1,-1,-1,-1,-1,-1,-1, 6,-1,-1, 2, 0 }, // K
};
DijkstraExample obj = new DijkstraExample();
obj.dijkstra(grph, 0);
}
我的圖表和來源正確嗎?
uj5u.com熱心網友回復:
輸入“圖表”中的行順序重要嗎?
不。
第一行總是必須是源節點的行嗎?
不。
例如,您可以重新組織順序,使“S”排在“F”之后:
int grph[][] = new int[][] {
//A B C D E F S G H I J K
{ 0, 1,-1,-1, 4,-1,-1,-1,-1,-1,-1,-1 }, // A
{ 1, 0, 4,-1,-1, 9,-1,-1,-1,-1,-1,-1 }, // B
{-1, 4, 0, 3,-1,-1, 1,-1,-1,-1,-1,-1 }, // C
{-1,-1, 3, 0,-1,-1,-1, 8,-1,-1,-1,-1 }, // D
{ 4,-1,-1,-1, 0, 2,-1,-1, 2,-1,-1,-1 }, // E
{-1, 9,-1,-1, 2, 0, 1,-1,-1, 3,-1,-1 }, // F
{-1,-1, 1,-1,-1, 1, 0, 1,-1,-1, 2,-1 }, // S
{-1,-1,-1, 8,-1,-1, 1, 0,-1,-1,-1, 6 }, // G
{-1,-1,-1,-1, 2,-1,-1,-1, 0, 1,-1,-1 }, // H
{-1,-1,-1,-1,-1, 3,-1,-1, 1, 0, 2,-1 }, // I
{-1,-1,-1,-1,-1,-1, 2,-1,-1, 2, 0, 2 }, // J
{-1,-1,-1,-1,-1,-1,-1, 6,-1,-1, 2, 0 }, // K
};
這涉及移動 S 行和 S 列。
然后,您將使用適當的索引呼叫求解器:
DijkstraExample obj = new DijkstraExample();
obj.dijkstra(grph, 6);
我的圖表和來源正確嗎?
矩陣和主要代碼(2 條陳述句)是正確的,但很大程度上取決于您的班級所做的事情。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471206.html
上一篇:分治演算法的sumlist
下一篇:難以簡化條件
