DS博客作业04--图
0.PTA得分截图
1.1 图的存储结构
1.1.1 邻接矩阵
typedef struct
{ int edges[MAXV][MAXV]; /*邻接矩阵*/
int n,e; /*顶点数、弧数*/
} MGraph;
见图函数
{
int a, b;
//初始化矩阵
for (int i = 1; i <= MAXV; i++) {
for (int j = 1; j <= MAXV; j++) {
g.edges[i][j] = 0;
}
}
//填入对应
for (int i = 1; i <= e; i++) {
cin >> a >> b;
g.edges[a][b] = 1;//无向图需要两个边都为一
g.edges[b][a] = 1;
}
g.e = e;
g.n = n;
}
1.1.2 邻接表
1.1.3 邻接矩阵和邻接表表示图的区别
各个结构适用什么图?时间复杂度的区别。
对于一个具有n个顶点e条边的无向图
它的邻接表表示有n个顶点表结点2e个边表结点
对于一个具有n个顶点e条边的有向图
它的邻接表表示有n个顶点表结点e个边表结点
如果图中边的数目远远小于n2称作稀疏图,这是用邻接表表示比用邻接矩阵表示节省空间;
如果图中边的数目接近于n2,对于无向图接近于n*(n-1)称作稠密图,考虑到邻接表中要附加链域,采用邻接矩阵表示法为宜。
1.2 图遍历
uploading-image-513819.png
1.2.1 深度优先遍历
深度优先遍历顺序:v1->v2->v0->v3