一、学习小结
好啦,又到了章节的小结时间啦~
先把思维导图放上来↓↓↓
总体总体来说,图的学习比较与树和二叉树来说是简单一些的(应该是老师没有深入来讲),不过自己存在的问题还是挺多的,关键是抓牢基础。图的存储结构是用邻接表或邻接矩阵来实现的。而且应该要知道他的顶点数和边数。我个人感觉本章知识的重点就是图结构的表示、创建(邻接矩阵、邻接表),求最小生成树,最短路径问题。
二、作业实践
其实看到这道题的时候我感觉还是比较简单的,就是把图构建出来,然后用深搜和广搜遍历输出就行,但是到了实际操作我发现自己的底层真的是一塌糊涂,完成过不了,要考参考其他人的才行。而且自己的格式啊啊啊!(捂脸~)这些是我遇到的问题,打了这道题磨了两天,嗯,我还是挺棒的。
下面是代码↓↓↓
1 #include<iostream> 2 #include<cstdio> 3 #include<deque> 4 #include<cstring> 5 using namespace std; 6 const int MAX_N = 10; 7 int g[MAX_N][MAX_N]; 8 int visited[MAX_N]={0};//用来标记节点是否已经输出 9 void BFS(int N){ 10 deque<int> q;//用来做层次遍历 11 memset(visited,0,sizeof(visited)); 12 for(int j = 0; j < N; j++){ 13 if(visited[j]) 14 continue; 15 cout<<"{ "; 16 q.push_back(j); 17 while(q.size()!=0){ 18 int head = q.front(); 19 visited[head]=true; 20 q.pop_front(); 21 for(int i = 0; i < N; i++){ 22 if(g[head][i]==1&&visited[i]==false){ 23 q.push_back(i); 24 visited[i] = true; 25 } 26 } 27 cout<<head<<" "; 28 } 29 cout<<"}"<<endl; 30 } 31 return; 32 } 33 void DFS(int start, int N){ 34 visited[start]=true; 35 cout<<start<<" "; 36 int i; 37 for(i = 0; i <= N; i++){ 38 if(g[start][i]==1&&visited[i]==false){ 39 DFS(i,N); 40 } 41 } 42 if(i==N) 43 return; 44 } 45 int main(){ 46 int N,E; 47 cin >> N >> E; 48 for(int i = 0; i < E; i++){ 49 int x,y; 50 cin >> x >> y; 51 g[x][y] = 1; 52 g[y][x] = 1; 53 } 54 //DFS 图版的前序遍历 55 memset(visited,0,sizeof(visited)); 56 while(1){ 57 int j; 58 for(j=0; j < N; j++){ 59 if(visited[j]==0){ 60 break; 61 } 62 } 63 if(j==N) 64 break; 65 cout<<"{ "; 66 for(j=0; j < N; j++){ 67 if(visited[j]==0){ 68 DFS(j,N); 69 break; 70 } 71 } 72 cout<<"}"<<endl; 73 } 74 75 //BFS 图版的层次遍历 76 BFS(N); 77 return 0; 78 }
三、参考分享
https://blog.csdn.net/qq_37513086/article/details/80015078
http://www.cnblogs.com/hirokin/p/9192100.html
推荐中国大学mooc北大郭炜老师的课(https://www.icourse163.org/learn/PKU-1002029030?tid=1002785058#/learn/content)
四、目标
上次的目标基本达成,我会继续多练习代码的。
下一个目标就是提高自己的底层算法,真正的脚踏实地去编一个程序;还有复习一下之前的内容,稳定基础。把自己的思维方法迁移到各个知识点上。
以上。
拜拜~下篇博客见。