Dijkstra算法的网格问题的源节点和图
Dijkstra Algorithm's source node and graph for grid problem
My grid
我正在尝试为上面附加的网格图实现 Dijkstra 算法,以找到从源节点到每个其他节点的最短路径。看了很多教程后,我不明白我应该如何定义我的起始节点和图形。
据我所知,网格不会改变 algorithm/implementation 的工作方式。在每个教程中,我 read/watched 源总是“0”。例如,我读到:Javatpoint article. This is their input: Javapoint graph, Javatpoint Driver class.
所以我想知道输入 'graph' 中行的顺序是否重要?第一行是否总是必须是源节点行?
这是我为我的网格实现驱动程序 class 的尝试:
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);
}
我的图表和来源是否正确?
do the order of rows in input 'graph' matter?
没有
Does first row always have to be the row of source node?
没有
例如,您可以重新排列顺序,使“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-row 和 S-column。
然后您将使用适当的索引调用求解器:
DijkstraExample obj = new DijkstraExample();
obj.dijkstra(grph, 6);
Is my graph and source correct?
矩阵和主要代码(2 条语句)是正确的,但很大程度上取决于您的 class 所做的事情。
My grid
我正在尝试为上面附加的网格图实现 Dijkstra 算法,以找到从源节点到每个其他节点的最短路径。看了很多教程后,我不明白我应该如何定义我的起始节点和图形。
据我所知,网格不会改变 algorithm/implementation 的工作方式。在每个教程中,我 read/watched 源总是“0”。例如,我读到:Javatpoint article. This is their input: Javapoint graph, Javatpoint Driver class.
所以我想知道输入 'graph' 中行的顺序是否重要?第一行是否总是必须是源节点行?
这是我为我的网格实现驱动程序 class 的尝试:
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);
}
我的图表和来源是否正确?
do the order of rows in input 'graph' matter?
没有
Does first row always have to be the row of source node?
没有
例如,您可以重新排列顺序,使“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-row 和 S-column。
然后您将使用适当的索引调用求解器:
DijkstraExample obj = new DijkstraExample();
obj.dijkstra(grph, 6);
Is my graph and source correct?
矩阵和主要代码(2 条语句)是正确的,但很大程度上取决于您的 class 所做的事情。