本章学习了图,图这种数据结构相对树的数据结构,又是复杂了许多,这一章图的作业是分别用深度搜索DFS和BFS广度搜索来输出非连通分量。抛开具体的存储结构,整个程序主要由三部分组成,主函数,调用DFS的函数,调用BFS的函数,循环多次调用广搜和深搜的函数,便可输出非连通图。
void DFS_AM(AMGraph &G,int v) { //邻接矩阵的深度搜索 for(int w=0;w<G.vexnum;w++) if(G.arcs[v][w]!=0 && (!visited[w]) ) { visited[w]=true; //每访问一个就要将其置为true cout << w << " "; DFS_AM(G,w); } }
void BFS_AM(AMGraph &G,int v) { visited[v]=1; queue<int> q; int u; q.push(v); while(!q.empty()) { u=q.front(); q.pop(); cout<< u << " "; for(int w=0;w<G.vexnum;w++) { if(G.arcs[u][w]!=0 && (!visited[w])) { visited[w]=1; q.push(w); } } }
在作业题我们可以看到,我采用的存储结构是邻接矩阵,因为在进行对矩阵的两个顶点的边进行初始化时双向边用数组操作较为方便,如果用链式存储,对于指针的操作时十分复杂的。
还有关于图的应用,经过老师上课的分析在对图的最小生成树,最短路径的应用中,我们需要掌握算法思想,以及需要用到的辅助结构,包括它们的初态和终态,这三个算法核心思想十分相似,这为我们以后的解题提供了新思路。