图论的应用
图论的应用:路线规划,网络路由路线,机器学习的基础
图的组成
概念:图是由顶点与边组成的集合
顶点 Vertex
边 Edge
权值 weight:一条边上的值
图的分类
无向图(undirected graph)
有向图(directed graph)
无权图
带权图
概念
两点相邻:两个顶点直接有一条边相连
点的邻边:与点相邻的边
路径:从一个点到达另外一个点,路上经过的边,称之为路径
环:一个顶点通过一条路径可以回到自身,称之为环
自环边:通向自己的边
联通分量:图中相连的一个区域称之为一个连通分量,一个图可以有多个连通分量
联通图:一个图只有一个联通分量,我们称之为联通图
生成树:在一个联通图中删去任意条边,使得图中只剩下V-1条边(V为顶点数),并且依然保持图是联通图,则新生成的图称之为原图的生成树
度 degree :一个顶点的度就是与这个顶点相邻的边数
入度: 在有向图中通向自己边的个数入度
出度:在有向图中从自己出发的边的个数称为出度
图的表示
邻接矩阵:
空间复杂度O(V^2)
时间复杂度:
构图:O(E)
查看两条边是否相连:O(1)
遍历一个点所有邻边: O(V)
邻接表:
空间复杂度O(VE)
时间复杂度:
构图:O(E)
查看两条边是否相连:O(E)
遍历一个点所有邻边: O(E)
构建邻接表
vector<int> g[100];
g[1].push_back(3);//从1到3直接有一条边相连
g[3].push_back(1);//如果是无向图,则另外一边也要连上
遍历邻接表,访问与v相邻的所有顶点:
for(int i=0;i<g[v].size();i++)
{
cout << g[v][i];
}