2.19日学习总结

2.19日学习总结

早上八点开始刷题,先刷了昨天学习的最短路径的相关题目,是最短路径的变形,这类题目就是求最大的最小权值,给你源点和终点,让你从x条通往终点的路中,分别每一条找出当前最小的权值,然后综合比较一下,求出最大的最小权值,这类题目和最短路径的代码差不多,唯一区别的就是,原本存储最短路径的quan数组,变成了存放最大的最小权值,在通过下面的公式就能得到答案
quan[j]=max(quan[j],min(maxt,G[t][j]));
这道题我花了一个多小时,在这里插入图片描述
然后差不多九点多,开始学习了拓扑排序,我先学习了用邻接矩阵的方法来拓扑排序
拓扑排序涉及到一种图,叫aov图,这种图是一个有向无环图,它的顶点用来表示活动,弧是用来表现优先关系的,就比如要学习数据结构,那么就要先学习c语言,这样的关系就是aov图描述的,重点是无环,因为成环就会不符合逻辑了。
拓扑排序的步骤是想找到一个入度为0的点,然后输出,然后把这个点从图中抹掉,再把以这个顶点为弧尾的弧全部删去,然后按这个步骤一直下去,直到顶点全部输出,或者找不到入度为零的点停止。因为在一次判断中可能存在多个入度为0的顶点,所以,拓扑排序不是唯一的,可以根据我们的需求来选择怎么排。
以邻接矩阵的方式来实现,首先定义G,rudu,tuopu三个数组,然后把每个顶点的入度统计一下,然后找入度为0的点存入tuopu数组,然后把跟这个存入的点有关系的点的入度减一,这就是核心的思想

void tuo()
{
    int i,j,t;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(G[i][j]==1)
            {
                rudu[j]++;
            }
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            if(rudu[j]==0)
            {
                t=j;
                break;
            }
        }
        rudu[t]=-1;
        tuopu[i]=t;
        for(j=1;j<=n;j++)
        {
            if(G[t][j]==1)
            {
                rudu[j]--;
            }
        }
    }
}

这是早上我做题的代码。
下午主要是刷pta上面的题目,在这里插入图片描述
晚上计划写数据结构的学习笔记。

发布了13 篇原创文章 · 获赞 0 · 访问量 405

猜你喜欢

转载自blog.csdn.net/a921893396/article/details/104397788
今日推荐