- 图的概念
- 图的存储
- 图的遍历
- 图论问题
图论简介——图是什么
- 图:表示物与物之间关系的方法
- 图论:以图为研究对象,研究顶点和边组成的图形的数学理论和方法
- 一般是 n 个点,m 条边
- 边的方向:
· 无向图:边双向连通(一种特殊的有向图,双向)
· 有向图:单向通行 - 边权
- 度:与此点相连边的数量
· 入度:流入此点的边的数量
· 出度:流出此点的边的数量
· 出、入度一般都用于有向图 - 完全图、稠密图、稀疏图
图的存储
邻接矩阵
- 邻接矩阵:用二维数组的方式存储一个图
- 存储规则:若 a—>b,则 map[ a ][ b ] = ( a 到 b 的距离 或1 ),无法访问值为 -1 或 正无穷
- a—>a = 0
- 无向图:map[ a ][ b ] = map[ b ][ a ]
- 空间复杂度 O(n2) 遍历一个点的时间复杂度 O(n)
- 由于邻接矩阵时空复杂度较大,在多数情况下效率较低,尤其是当图比较稀疏(边数远没有达到点数平方)时。(例如有 1000 个点,但仅有 1000 条边时,为边开的空间大小是 1000*1000,就会很浪费)所以基本不用邻接矩阵。
#include <bits/stdc++.h>
using namespace std;
const int maxn=1005; // 图的最大 点 数量
int n;
int v[maxn][maxn];
int main()
{
cin>>n;
// 读入邻接矩阵
for(int i=1; i<=n; i_++)
for(int j=1; j<=n; j++)
cin>>v[i][j];
// 下面的代码将找到与点 i 有直接连接的每一个点以及那条边的长度
for(