根据性质,图可以分为无向图和有向图。本文先介绍无向图,后文再介绍有向图。之所以要研究图,是因为图在生活中应用比较广泛。
无向图
图是若干个顶点(Vertices)和边(Edges)相互连接组成的。边仅由两个顶点连接,并且没有方向的图称为无向图。在研究图之前,有一些定义需要明确,下图中表示了图的一些基本属性的含义,这里就不多说明。
图的API表示
在研究图之前,我们需要选用适当的数据结构来表示图,有时候,我们常被我们的直觉欺骗,如下图,这两个其实是一样的,这其实也是一个研究问题,就是如何判断图的形态。
要用计算机处理图,我们可以抽象出以下的表示图的API:
Graph的API的实现可以由多种不同的数据结构来表示,最基本的是维护一系列边的集合,
如下:还可以使用邻接矩阵来表示:
也可以使用邻接列表来表示:
由于采用如上方式具有比较好的灵活性,采用邻接列表来表示的话,可以定义如下数据结构来表示一个Graph对象。
public classGraph
{private readonly int verticals;//顶点个数
private int edges;//边的个数
private List[] adjacency;//顶点联接列表
public Graph(intvertical)
{this.verticals =vertical;this.edges = 0;
adjacency=new List[vertical];for (int v = 0; v < vertical; v++)
{
adjacency[v]=new List();
}
}public intGetVerticals ()
{returnverticals;
}public intGetEdges()
{returnedges;
}public void AddEdge(int verticalStart, intverticalEnd)
{
a