zoukankan      html  css  js  c++  java
  • 《数据结构》第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

     

    四、目标

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

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

    以上。

    拜拜~下篇博客见。

     

  • 相关阅读:
    jQuery邮箱验证
    查看图片前进后退效果
    jQuery实现全选与反选
    jQuery在p前后添加节点
    jQuery中的fadeIn、fadeOut、fadeTo的应用
    jQuery中图片隐藏效果的所有方法
    jQuery中animate的应用(图片自动移动)
    jQuery图片复制
    N!具体数值有多少位数字
    顺序队列的初始化,建立,插入,查找,删除。
  • 原文地址:https://www.cnblogs.com/jyf2018/p/10889297.html
Copyright © 2011-2022 走看看