C 我可以在图表的边缘插入数据吗? 我可以把数据放在相邻列表图的边上吗?

C 我可以在图表的边缘插入数据吗? 我可以把数据放在相邻列表图的边上吗?,c,C,我的要求如下: (A) 所需信息: A-1。100个城市,每个城市的游览时间 A-2。300站点之间的运输(含价格) (B) 显示直接访问的城市图表(100个站点,其中有300条直接路线) (C) 图由带距离的边组成 从(B)中,我认为城市是顶点,路线(交通)是边 (A.需要的信息)说运输应该有自己的价格 (C)表示边缘有距离 这就是为什么我对如何将数据置于边缘感到好奇。 我认为edge只是一个抽象概念,实际上是通过将另一个节点的地址提供给该节点来实现的 比如: 如何使用数据实现边?谢谢。是的

我的要求如下:

(A) 所需信息: A-1。100个城市,每个城市的游览时间 A-2。300站点之间的运输(含价格)

(B) 显示直接访问的城市图表(100个站点,其中有300条直接路线)

(C) 图由带距离的边组成


从(B)中,我认为城市是顶点,路线(交通)是边

(A.需要的信息)说运输应该有自己的价格 (C)表示边缘有距离

这就是为什么我对如何将数据置于边缘感到好奇。 我认为edge只是一个抽象概念,实际上是通过将另一个节点的地址提供给该节点来实现的

比如:


如何使用数据实现边?谢谢。

是的,您可以将数据与图形边关联,它与您表示图形的方式无关。想想你将如何解决这个问题;显然,您需要知道图形中两个节点之间的距离,这些信息是连接它们的边的属性,而不是单个节点的属性

在您的示例中,您可以:

// create reciprocal links between nodes 'src' and 'dst',
// containing the 'distance' information
void graph_link_two_cities(struct Graph* graph, int src, int dst, int distance)
{
    {
        struct Edge* head = graph->array[src].head; 
        struct Edge* node = { .id = dst, .distance = length, .next = head });
        graph->edges[src].head = node;
    }

    {
        struct Edge* head = graph->array[dst].head; 
        struct Edge* node = { .id = src, .distance = length, .next = head });
        graph->edges[dst].head = node;
    }
}

使用邻接矩阵,您只需将
src
dst
之间的距离存储到
matrix[src][dst]

[…]其他方法[…]——当前的方法是什么?是否您对英语中“edge”一词的各种含义感到困惑?在图论中,它是任意两个节点之间的连接(不仅仅是图的“边”上的节点):@Swardfish我的意思是给节点提供相邻节点的地址。一个图由边连接的顶点(或节点)组成,即每个边由一对顶点定义。代码将指向
dest
的链接插入节点
src
的邻接列表中,即定义从
src
dest
的边。我能想到的唯一其他表示图形的方法是,只需要有一个大的边列表(即,没有像邻接列表那样按顶点分组),或者有一个邻接矩阵。但如果你问是否可以将数据与边缘关联,是的,你可以。您的
struct AdjListNode
可以轻松保存数据(例如城市之间的距离)。您可以根据图形的用途为节点或边指定“权重”。假设您正在映射一个城市列表。然后你想找到两个城市之间的最短路径。然后,让边表示道路,并给它们一个与距离相等的“权重”是非常有意义的。将其理解为Vertix-(连接)-边-(连接)-Vertix的形式是否合理?也许,是的,只需确保
下一个
指针不会混淆:
数组[src]
包含一个顶点列表,所有顶点都连接到
src
顶点,但不相互连接。例如,如果节点
1
连接到
4
7
8
,则将有一个类似于
array[1]>4->7->8->null的链接列表。这并不意味着
4
7
8
是相互连接的,也就是说,您在该列表中看到的链接只允许您动态构建连接到源顶点的节点列表。好的,我不会混淆它!非常感谢你,你救了我
// create reciprocal links between nodes 'src' and 'dst',
// containing the 'distance' information
void graph_link_two_cities(struct Graph* graph, int src, int dst, int distance)
{
    {
        struct Edge* head = graph->array[src].head; 
        struct Edge* node = { .id = dst, .distance = length, .next = head });
        graph->edges[src].head = node;
    }

    {
        struct Edge* head = graph->array[dst].head; 
        struct Edge* node = { .id = src, .distance = length, .next = head });
        graph->edges[dst].head = node;
    }
}