C 如何用列表表示图形的边?

C 如何用列表表示图形的边?,c,list,graph,C,List,Graph,如何将图形表示为边列表?如果要精确存储边,请使用权重矩阵:int**M,其中M[i][t]是i和t顶点之间的边的长度 如果图边的权重为1,则可以将图存储在邻接矩阵中,其中M[i][t]等于: 0如果i和t顶点之间没有边 1如果从i到t有边 alpha如果i==t且i(或t)顶点中存在循环 如果需要对内存使用至关重要的结构,请将图形存储在链表中,其中每个顶点都有结构: struct Vertex { int N; Vertex* next; }; 因此,您将拥有一个顶点结构数组,每个

如何将图形表示为边列表?

如果要精确存储边,请使用权重矩阵:
int**M
,其中
M[i][t]
是i和t顶点之间的边的长度

如果图边的权重为1,则可以将图存储在邻接矩阵中,其中
M[i][t]
等于:

  • 0如果i和t顶点之间没有边
  • 1如果从i到t有边
  • alpha如果i==t且i(或t)顶点中存在循环
如果需要对内存使用至关重要的结构,请将图形存储在链表中,其中每个顶点都有结构:

struct Vertex
{
  int N;
  Vertex* next;
};
因此,您将拥有一个顶点结构数组,每个顶点结构都包含指向它所连接的下一个顶点的指针。例如,下面是一些链表图:

  • 1->3->4
  • 2->5
  • 3->4
  • 4->3
  • 5->2

    • 有三种常见的方法:

    • 邻接矩阵:边权重的V*V表,其中第j行的第i列是顶点i和j之间边的权重。如果没有边,则通常使用无穷大(或者可以使用一些哨兵值,如-1)

    • 邻接列表:V链接列表的数组。数组中的每个第i个列表都是离开第i个顶点的边的列表

    • 边列表:简单的边元组(u,v)列表


    • 不同的适用于不同的目的。我个人认为邻接列表是最有用的,但是如果你有一个非常密集的图,那么邻接矩阵可以提高性能和内存使用。

      除非你真的想自己实现表示,作为一个学习练习或有更多的控制,考虑使用一个库,例如C是用于表示和操作图形的C库。或者向下一个抽象级别—自己构建邻接列表或边缘列表,但使用的列表构建功能,而不是自己滚动列表。

      谢谢。但是在C编程中,我们如何使用3中提到的边列表初始化边列表。假设我们有这个边列表(0,1),(0,2),(0,3),(0,4),(1,2),(1,3),我们必须在主程序中初始化它