《数据结构》--第6章图

一、学习小结

好啦,又到了章节的小结时间啦~

先把思维导图放上来↓↓↓

总体总体来说,图的学习比较与树和二叉树来说是简单一些的(应该是老师没有深入来讲),不过自己存在的问题还是挺多的,关键是抓牢基础。图的存储结构是用邻接表或邻接矩阵来实现的。而且应该要知道他的顶点数和边数。我个人感觉本章知识的重点就是图结构的表示、创建(邻接矩阵、邻接表),求最小生成树,最短路径问题

 

二、作业实践

其实看到这道题的时候我感觉还是比较简单的,就是把图构建出来,然后用深搜和广搜遍历输出就行,但是到了实际操作我发现自己的底层真的是一塌糊涂,完成过不了,要考参考其他人的才行。而且自己的格式啊啊啊!(捂脸~)这些是我遇到的问题,打了这道题磨了两天,嗯,我还是挺棒的。

下面是代码↓↓↓

 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 }
View Code

 

三、参考分享

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

 

四、目标

上次的目标基本达成,我会继续多练习代码的。

下一个目标就是提高自己的底层算法,真正的脚踏实地去编一个程序;还有复习一下之前的内容,稳定基础。把自己的思维方法迁移到各个知识点上。

以上。

拜拜~下篇博客见。

 

猜你喜欢

转载自www.cnblogs.com/jyf2018/p/10889297.html