本章,我们学习了图。
首先是图(GRAPH)的定义
一种非线性数据结构,由有穷、非空的点集V(G)和边集E(G)组成。当G中的每条边有方向时,称G为有向图,有向边(用一对尖括号<a,b>)又称为弧,起始顶点被称为弧尾,终止顶点被称为弧头,每条边无方向时(用一对括号表示(a,b)和(b,a)一样),被称为无向图。
图的存储方式
1.邻接矩阵(二维数组存储)
void creat(vexList GV, adjmatrix GA, int n,int e){int i,j,k,w;cout << "输入"<<n<<"个顶点的值:"<<endl;//初始化顶点数组for(int i = 0; i < n; i++) { cin>>GV[i];}//初始化邻接矩阵 for(int i = 0; i < n; i++) for(int j = 0; j < n; j++){if(i==j) GA[i][j] = 0;else GA[i][j] = maxValue;}//建立邻接数组 cout << "输入"<<e<<"条边:"<<endl;for(int k = 0; k < e; k++){cin >> i >> j >>w;GA[i][j] =GA[j][i] = w;}}
2.邻接表存储
3.编辑数组
然后是本章的重点
邻接矩阵表示法的特点:
优点是容易实现图的操作。
缺点是空间效率为O(n2)。对稀疏图浪费空间。
图的遍历
DFS:从图中某个顶点V0 出发,访问此顶点,然后依次从V0的各个未被访问的邻接点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到
BFS:在访问了起始点v之后,依次访问 v 的邻接点; 然后再依次访问这些顶点中未被访问过的邻接点; 直到所有顶点都被访问过为止。
在这周我们还学习了求最短路径的方法,我觉得很有意思。
分别是Dijkstra算法和Floyd算法。
对于上次的目标,首先敲代码的积极性有提高,但pta的作业还是卡着ddl完成的,然后就是上课有时候会有点走神,导致有些小细节要课后去问同学才行,就还是希望自己能够把学习当做乐趣而不是工作。
ps:图片来自CSDN