• DS博客作业06--图


    1.本周学习总结

    1.1思维导图

    1.2体会

    图的存储结构相对于线性表和树来说更为复杂,更加灵活。在解决有关图的问题上,比起自己摸索,还是掌握已有的高效算法来的实际。什么题目适合哪种图存储结构,用哪种算法比较简单,这都是在做题前要认真思考的。很多时候,没有用好方法容易让简单的问题复杂化。而在后续的学习中,我们利用STL的基础设施,就可以很快的搭建Graph。

    2.PTA实验作业

    2.1题目一:六度空间

    “六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”

    2.1.1设计思路

    BFS函数
    {
    定义数组visited并初始化为0;
    定义last=x,level=0,tail;
    定义i,j;
    定义整型队列q;
    将x入队;
    visited[x]=1;
    while 队不为空
          x等于队头;出队;
          for j=1 to j=n
                if visited[j]等于0 且a[x][j]==1
                      count++;
                      tail等于j;
                      visited[j]等于1;
                      将j入队;
    if x等于last
          last++;
          last等于tail;
    if level等于6
          结束循环;
    }
    main函数
    {
    定义a,b;
    定义i;
    输入n,m;
    for i=1 to m
          输入a,b;
          a[b][c]=1;
          a[c][b]=1;
    for i=1 to n
          count=1;
          BFS(i);
          输出i;
          输出count;
    return 0;
    
    }
    

    2.1.2代码截图



    2.1.3本题PTA提交列表说明

    • Q1:原本用到邻接矩阵做这道题,想的太复杂了,导致写出来很乱。
    • A1:用一个全局变量a的二维数组,再用BFS遍历,过程就简单多了。

    2.2题目二:图着色问题

    图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
    但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。

    2.2.1设计思路

    main函数
    {
    定义邻接表G;
    int V,E,K;
    int N;
    输入 V,E,K;
    创建邻接表CreateAdj(G,V,E);
    输入N;
    for i=1 to N
          IsTrue(G,K)
    return 0;
    }
    IsTrue函数
    {
    定义邻接表结点p;
    定义set<int> s;
    定义i,flag=0;
    定义整型数组a并初始化0;
    for i=1 to G->n
          输入a[i];
          s.insert(a[i]);
    if s.size()!=k //若颜色数量不对
          flag=1;
    else
          for i=1 to G->n
                p=G->adjlist[i].firstarc;
          while p不为NULL
                if a[p->adjvex]等于a[i]
                      flag=1;
                      结束循环;
                p=p->nextarc;
    if flag等于0
          输出“yes”;
    else
          输出“no”;
    
    }
    
    

    2.2.2代码截图




    2.2.3本题PTA提交列表说明

    • Q1:多种错误
    • A1:刚开始写的时候想用数字来记录颜色数,后来发现不大可行,百度了其他代码,学着他们用了set,方便了许多。
    • Q2:最大图时运行错误
    • A2:把MAXV由500改为501就对了

    2.3题目三:公路村村通

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

    2.3.1设计思路

    findmin函数
    {
    定义minn=4556,index=1;
    定义i;
    for i=1 to N
          if dist[i]不等于0且minn大于dist[i]
                minn等于dist[i];
                index等于i;
    return index;
    }
    Prim函数
    {
    int cnt=1,cost=0;
    int v;
    for i=1 to N
          parent[i]等于s;
          dist[i] 等于c[i];
    parent[s]等于-1;
    dist[s]等于0;
    while
          v=findmin();
          if(v==-1)结束循环;
          cost+=dist[v];
          cnt++;
          dist[v]=0;
          for i=1 to N
                if dist[i]不等于0且c[v][i]小于dist[i]
                      dist[i]等于c[v][i];
                      parent[i]等于v;
    if(cnt等于N)输出cost;
    else 输出-1;
    
    }
    
    

    2.3.2代码截图




    2.3.3本题PTA提交列表说明

    3.上机考试错题及处理办法

    题目:拓扑排序

    给定一个有向图,求其拓扑序列,若有环路,输出error!

    3.1截图错题代码


    3.2错的原因及处理方法到

    • 1.刚开始测试点1出现了答案错误,检查后发现是在输出函数时的循环条件写错了,记录结点数的k应该从0开始到G->n才对。
    • 2.在提交时,忘记把测试时的*改回空格,导致答案错误。
  • 相关阅读:
    Hybrid APP基础篇(四)->JSBridge的原理
    剑指offer
    剑指offer
    如何在HTML中设置文本的大小写
    如何给HTML标签中的文本设置修饰线
    CSS设置文本的水平对齐方向
    如何在HTML中设置字体颜色,你知道这几种方式吗?
    CSS尺寸样式属性
    CSS基本选择器是什么?基本选择器是如何工作
    如何创建 CSS
  • 原文地址:https://www.cnblogs.com/chianun2000/p/10963108.html
Copyright © 2020-2023  润新知