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),我们必须在主程序中初始化它