Python 用邻接矩阵表示图

Python 用邻接矩阵表示图,python,python-3.x,dijkstra,Python,Python 3.x,Dijkstra,因此,我试图理解Dijkstra在python中的算法,但我不清楚图形,因为我不理解每个子列表的真正含义,我理解某些数字,如3、4、1和0.5,是某些Vericle的距离,但事实上就是这样。我附加的图像是什么图形看起来像视觉 邻接矩阵显示顶点对之间的信息。在本例中,应将列表解释为矩阵,其中每行和每列中的元素对应一对顶点: # Creating the graph as an adjacency matrix vertices = [[0, 1, 1, 0], [0, 0,

因此,我试图理解Dijkstra在python中的算法,但我不清楚图形,因为我不理解每个子列表的真正含义,我理解某些数字,如3、4、1和0.5,是某些Vericle的距离,但事实上就是这样。我附加的图像是什么图形看起来像视觉


邻接矩阵显示顶点对之间的信息。在本例中,应将列表解释为矩阵,其中每行和每列中的元素对应一对顶点:

# Creating the graph as an adjacency matrix
vertices = [[0, 1, 1, 0],
            [0, 0, 1, 0],
            [0, 0, 0, 1],
            [0, 0, 0, 0]]
edges =  [[0, 3, 4, 0],
          [0, 0, 0.5, 0],
          [0, 0, 0, 1],
          [0, 0, 0, 0]]
这里,
a
列和
a
行中的0,或位置(0,0)表示
a
节点到
a
节点之间没有边,
b
列和
a
行或位置(0,1)中的1表示从
a
节点到
b
节点有一条边。换句话说,只要有1,就表示有一条边从对应于行的节点开始,到对应于列的节点结束,而0表示没有边


将类似的逻辑应用于
列表,该列表将标记边的权重,而不仅仅是标记边是否存在。如@misha所述,该列表不足以表示节点的互连性,因为节点之间的边可能具有0的权重,这将与根本不存在的边无法区分,因此,
顶点
矩阵都是必要的

邻接矩阵显示顶点对之间的信息。在本例中,应将列表解释为矩阵,其中每行和每列中的元素对应一对顶点:

# Creating the graph as an adjacency matrix
vertices = [[0, 1, 1, 0],
            [0, 0, 1, 0],
            [0, 0, 0, 1],
            [0, 0, 0, 0]]
edges =  [[0, 3, 4, 0],
          [0, 0, 0.5, 0],
          [0, 0, 0, 1],
          [0, 0, 0, 0]]
这里,
a
列和
a
行中的0,或位置(0,0)表示
a
节点到
a
节点之间没有边,
b
列和
a
行或位置(0,1)中的1表示从
a
节点到
b
节点有一条边。换句话说,只要有1,就表示有一条边从对应于行的节点开始,到对应于列的节点结束,而0表示没有边


将类似的逻辑应用于
列表,该列表将标记边的权重,而不仅仅是标记边是否存在。如@misha所述,该列表不足以表示节点的互连性,因为节点之间的边可能具有0的权重,这将与根本不存在的边无法区分,因此,
顶点
矩阵都是必要的

需要注意的是,边的
权重
也可以是0,因此
矩阵不足以表示图形,而
顶点
矩阵是必不可少的。感谢您的评论!我现在明白了,谢谢!此外,我还有一个问题,我将如何在pygame制作的网格中实现该算法,在该网格中,我要求用户选择起点和终点?就像我认为每个方块的权重应该是1一样(直到我可能添加了某种更高权重的障碍物),但是我如何才能真正创建像图这样的图呢?@jackbob没问题。我以前也做过类似的事情,我通过创建一个
Grid
类来实现它,该类是一个二维列表的包装器,表示网格系统的x,y坐标。正如您所猜测的,权重仅为1,因此不需要邻接矩阵,因为您知道与单个网格块相邻的四个(除非位于边界)网格块是相邻节点。或者,如果包括对角线移动,则为8个相邻网格块。这有用吗?这是我从你说的话中理解的,基本上,创建一个网格类,它具有某些属性,比如像我说的权重为1,还可以计算出我们正在分析或检查的单元格是否是边界,这意味着它有3个其他相邻单元格如果它在边界上,那么它有5个相邻单元格,否则它将有8个相邻单元格。我不明白你对包装部分的确切意思。此外,为了应用该算法,我基本上必须逐个单元格检查,然后检查其相邻单元格,并更新权重。需要注意的是,边的
权重也可以为0,因此
矩阵不足以表示图,而
顶点
矩阵是必不可少的。感谢您的评论!我现在明白了,谢谢!此外,我还有一个问题,我将如何在pygame制作的网格中实现该算法,在该网格中,我要求用户选择起点和终点?就像我认为每个方块的权重应该是1一样(直到我可能添加了某种更高权重的障碍物),但是我如何才能真正创建像图这样的图呢?@jackbob没问题。我以前也做过类似的事情,我通过创建一个
Grid
类来实现它,该类是一个二维列表的包装器,表示网格系统的x,y坐标。正如您所猜测的,权重仅为1,因此不需要邻接矩阵,因为您知道与单个网格块相邻的四个(除非位于边界)网格块是相邻节点。或者,如果包括对角线移动,则为8个相邻网格块。这有用吗?这是我从你说的话中理解的,基本上创建一个网格类,它具有某些属性,比如像我说的,权重为1,并且计算出我们正在分析或检查的单元格是否是边界,这意味着它有3个其他相邻单元格如果它在边界上,那么它有5个相邻单元格,否则它将