图
1、典型应用场景:高速公路交通网编程
2、定义:一系列顶点和描述顶点之间关系的边(弧)组成图G。图是数据元素的集合
G=(V,E)
V是顶点集合,E是边或者弧的集合。有向图和无向图(区别为连接顶点的边是否有向,即(Vi,Vj)与(Vj,Vi)是否相同),带权图和不带权图(区别为边是否有带有权重)
度:无向图中度为连接顶点的边或弧的数
出度:有向图中从顶点出发的边数
入度:有向图中指向该顶点的边数
权:边上带的数据信息,表示两个顶点之间的关系
边:无向
弧:有向,分弧头弧尾
有向完全图:任意两个顶点之间是弧相连的,有n(n-1)条弧
无向完全图:任意两个顶点之间是边连接,边数为n(n-1)/2
稠密图和稀疏图:取决于边的数,相对而言
3、图的基本操作
插入顶点
查找顶点
删除顶点
插入边
查找边
删除边
求 图的边数
求图的定点数
遍历图
求最短路径
4、图的抽象数据类型
ADT图接口
数据元素:具有相同数据类型的数据元素集合
数据结构:数据元素之间通过边或弧连接形成网络
数据操作: 将数据操作定义在接口中MyGraph:
public interface MyGraph
{
public int getNumOfVertex(); //获取顶点个数
boolean insertVex(E v); //插入顶点
boolean deleteVex(E v); //删除顶点
int indexOfVex(E v); //定位顶点位置
E valueOfVex(int v); //定位指定位置的顶点
boolean insertEdge(int v1,int v2,int weight); //插入边
boolean deleteEdge(int v1,int v2); //删除边
public int getEdge(int v1,int v2); //获取边
String depthFirstSearch(int v); //深度优先搜索遍历
String breadFirstSearch(int v); //广度优先搜索遍历
public int[] dijkstra(int v); //查找源点到其他点的最短路径
}
5、图的实现
5.1 用邻接矩阵实现图
邻接矩阵