1.本周学习总结

1.1.思维导图

1.2.谈谈你对图结构的认识及学习体会

  • 本章学习了图结构的相关知识,图形结构属于复杂的非线性数据结构,在实际应用中很多问题可以用图来描述。在图结构中,每个元素可以有零个或多个前驱元素,也可以有零个或多个后继元素,也就是说元素之间的关系是多对多的。无论多么复杂的图都是由顶点和边构成的,所以定义时,图结构由两个集合点和边构成。图的存储方法为邻接矩阵和邻接表,前者引用数组,后者引用指针,所以两者在不同算法上有着自己的优势。图的遍历分为广度优先遍历BFS和深度优先遍历DFS,当在一个不带权图中搜索从一个顶点到另一个顶点的一条路径时,DFS求出的路径不一定时最短路径,而BFS求出的路径一定是最短路径。
  • 图结构和算法衍生出一些其他的概念。在连通图找最小生成树,有普里姆算法、克鲁斯卡尔算法,两者都是采用邻接矩阵最合适;在带权图中找最短路径,有狄克斯特拉算法和弗洛伊德算法,前者输出单源路径,后者输出多源路径;在有向图中找一个拓扑序列的拓扑排序,可用来判断是否有环路;在AOE网中,从源点到汇点的所有路径中具有最大路径长度的路径称为关键路径,用于解决工程用时问题。学习了图结构后,就需要用它解决一些复杂的工程问题,所以题目难度也是更深了一层。

2.PTA实验作业

2.1.题目1:图着色问题

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

2.1.1设计思路(伪代码)

定义计量数i,j
定义set容器s判断颜色个数是否正确
定义vector容器数组vec[]存放点的邻接点
定义顶点数v、边数e、颜色数k并输入
定义a和b分别为边的两个端点并输入
循环输入把b存放到vec[a]中和a存放到vec[b]中
定义num为方案个数并输入
定义颜色数组color[]存储颜色方案
定义flag判断方案是否匹配
while(num次)
初始化flag为1
清空储存在s中的所有元素
把颜色插入到容器s中
对s中的元素个数与k比较,不相等即颜色个数有误
for i=1 to v do //着色判断
for j=0 to vec[i].size() do
每个点和邻接点进行比较,颜色相同则置flag为且退出循环
end for
flag为0时退出循环
end for
flag为1时输出Yes
否则输出No
end while

2.1.2代码截图



2.1.3PTA提交列表说明



Q1:如果没有考虑方案中颜色个数是否和给定k相同,则会有几个测试点不能过

A1:另外判断颜色个数是否相同,不相同则直接判断为方案不符合;着色判断时的双重循环能更全面地遍历比较所有边。

Q2:题目在之前用图的构建做过,后来改用vector和set容器改进代码

A2:vector容器的特点是插入和读取方便,大小随元素的个数改变,所以用来存储每个点的邻接点;set容器的特点是集合,元素各不相同,且自动把元素从大到小排列,所以用来判断颜色的个数与k进行对比。

2.2.题目2:六度空间

假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

2.2.1设计思路(伪代码)

定义结点数N和边数M
定义顶点访问标记数组visited[]
定义关联数组Adj[][]
int main()
输入N和M
输入数据,将有关联的两点数组Adj置为1
for i=1 to N do
初始化visited数组
计算并输出百分比
end for int BFS(int v)
新建队列q
v出队q
visited[v]置为1
while 队不空且层数小于6
取队首做临时调用点w
循环遍历结点
如果结点未遍历
则结点人数加一,记录位置,记录visited,入队
if w==last then
记录当前层数的最后一个元素的位置
结点层数加一
end if
end while

2.2.2代码截图



2.2.3PTA提交列表说明



Q1:题目难点体现在社交网络图之间存在复杂的关系链,难以直接计算出百分比

A1:采用图的遍历的方法,递归分层运算,能简化这个社交网络图中关系的计算。

Q2:代码仿造课本上广度遍历的代码,再参考同学的思路和命名,经过不断的修改,最后整合出较间接易懂的代码

A2:用队列函数替代数组存储,层层返回结点人数,利用memset函数初始化数据。

2.3.题目3:公路村村通

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

2.3.1设计思路(伪代码)

int main()
输入城镇数V和道路数e
调用函数CreateGraph(v,e)
调用函数Prim(v,e) void CreateGraph(int v,int e)
初始化数组中各边的值为INF
读入边信息,置成本为权值 int Prim(int v,int e)
定义最小边lowcost[MAXV]
定义最小值MIN
定义计量数i,j,k
定义最低成本cost=0
置lowcost[]为初值
for i=1 to v do
置MIN为INF
k初始化为0
for j=2 to v do //找出最近的点
if lowcost[j]!=0且lowcost[j]<MIN then
MIN为lowcost[j];
k记录最近顶点的编号j
end if
end for
若k等于0,则cost为-1且退出循环 //路径不连通
cost加上MIN
lowcost[k]为0 //表示此结点已处理
for j=2 to v do //调整
若lowcost[j]!=0且G[k][j]<lowcost[j],则lowcost[j]=G[k][j]
end for
end for
输出cost

2.3.2代码截图



2.3.3PTA提交列表说明





Q1:这题不需要用到求最短路径的算法,而用到求最小生成树的算法,故采用Prim算法

A1:主体Prim算法中有两重循环,外层循环顶点次数,里层循环找最近顶点和调整数组,比起书上的Prim算法,删掉了不必要的clostet。

Q2:循环的初始值设置错误导致段错误和答案错误

A2:外层的循环次数应为n-1次,里层的循环计量数j的起始值应是2,小于2时会导致处理到无关顶点。

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

3.1 错题

3.1.1 错题一:公路村村通

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

输入格式:

输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建>的预算成本。为简单起见,城镇从1到N编号。

输出格式:

输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。



3.1.2 错的原因及处理方法

  • 题目在devC上调试的,运行崩了加上时间不够,bug没改出来,所以在pta上提交了输出-1
  • 前半部分的主体直接复制采用6-1最短路径的方法,构建主体和建图,但用Dijkstra算法时不熟练,直接放弃改用Prim算法了。在Prim算法中,第一是在找最近的顶点的循环中忘记以j为2为起始点查找,第二是在对lowcost调整时忘记以j为2为起始点修改,第三是忘了在每次循环时给k初始化为0,主要是这三处的错误导致程序运行崩了,所以这题没做出来。

3.2 未做题

3.2.1 错题一:最短路径

给定一个有向图,规定源点为0,求源点0到其他顶点最短路径。

3.2.2 错题二:六度空间

假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

3.2.3 错题三:天梯地图

本题要求实现一个天梯赛专属在线地图,队员输入自己学校所在地和赛场地点后,该地图应该推荐两条路线:一条是最快到达路线;一条是最短距离的路线。题目保证对任意的查询请求,地图上都至少存在一条可达路线。

3.2. 错的原因及处理方法

  • 由于编写代码不够熟练导致在其他题目上修改的时间太多,这些题来不及做,只输出了特殊结果。
  • 虽然能在平时做题时能在pta上完成代码,但时间一久就会忘记思路,再次碰到还是生疏。图结构的算法有多种,记忆的时候容易混淆,所以在做完题目后需要多总结,找相同突破口方便记忆,多复习理解。

DS博客作业06--图的更多相关文章

  1. DS博客作业06——图

    1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对图结构的认识及学习体会. 这章学习了图,学习了图的两种存储结构:邻接矩阵和邻接表.这两种存储结构都用到了之前学c时学到的结构体,将结构体充分运 ...

  2. DS博客作业06—图

    1.本周学习总结 1.1思维导图 1.2学习体会 2.PTA实验作业 2.1 图着色问题 图着色问题是一个著名的NP完全问题.给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色, ...

  3. C语言博客作业06——结构体&文件

    C语言博客作业06--结构体&文件 1.本章学习总结 1.1思维导图 1.2.本章学习体会 在本周的学习中,我们学习了关于结构体和文件的内容.结构体的本身并不难,但以结构体为基础的链表还是让我 ...

  4. DS博客作业——树

    DS博客作业--树 1.本周学习总结 1.思维导图 2.谈谈你对树结构的认识及学习体会. 在树这一章节,我们学习的是二叉树的算法. 树的构建:一种是直接给树的顺序存储结构的字符串,一种是通过先序遍历和 ...

  5. DS博客作业--07查找

    目录 DS博客作业--07查找 1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 2.1.题目1:6-1 二叉搜索树的操作集 (30 分 ...

  6. DS博客作业05--查找

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业05--查找 这个作业的目标 学习查找的相关结构 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1.1 ...

  7. DS博客作业04--图

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业04--图 这个作业的目标 学习图结构设计及相关算法 姓名 黄静 目录 0.PTA得分截图 1.本周学习总结 1. ...

  8. DS博客作业08--课程总结

    DS博客作业08--课程总结 1.当初你是如何做出选择计算机专业的决定的? 1.1 经过一年学习,你的看法改变了么,为什么? 1.2 你觉得计算机是你喜欢的领域吗,它是你擅长的领域吗? 为什么? 1. ...

  9. C语言l博客作业06

    C语言l博客作业06 问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homew ...

  10. DS博客作业03--树

    这个作业属于哪个班级 数据结构--网络2011/2012 这个作业的地址 DS博客作业03--树 这个作业的目标 学习树结构设计及运算操作 姓名 黄静 目录 0. PTA得分截图 1. 本周学习总结 ...

随机推荐

  1. nodeis 避免回调引起的栈溢出 Maximum call stack size exceeded

    //如果这样写,会发生栈溢出 var i = 1; function isEven() {      console.log(i++); // return isEven();        retu ...

  2. 洛谷 P3387 【模板】缩点

    题目背景 缩点+DP 题目描述 给定一个n个点m条边有向图,每个点有一个权值,求一条路径,使路径经过的点权值之和最大.你只需要求出这个权值和. 允许多次经过一条边或者一个点,但是,重复经过的点,权值只 ...

  3. 使用nodejs和Java访问远程服务器的服务

    既然这篇文章用的是nodejs和Java访问远程服务器的服务,那么咱们先用另一门编程语言,SAP的ABAP(我日常工作使用得最多的编程语言)来开发一个服务吧. 这是我用ABAP编程语言实现服务的类:Z ...

  4. KMP算法入门讲解

    字符串匹配问题.假设文本是一个长度为$n$的字符串$T$,模板是一个长度为$m$的字符串$P$,且$m\leq n$.需要求出模板在文本中的所有匹配点$i$,即满足$T[i]=P[0],T[I+1]= ...

  5. 完整的.h宏定义

    ##封装中的要点 __declspec(dllexport) 表明函数为导出函数 * `extern "C"` 导出的函数名与声明一致,否则导出函数名无法正常使用 当然,也可以通过 ...

  6. C#访问数组元素

    在C#中,使用索引来访问数组元素.索引必须是一个整型值. 在数组中,每一个维度的索引从0开始. 一.访问一维数组元素 int[] array = {1,2,3,4,5,6,7,8,9,10}; // ...

  7. SpringBoot(一)_Eclipse的安装和使用

    1.Eclipse中安装STS插件: Help -> Eclipse Marketplace… Search或选择“Popular”标签,选择Spring Tool Suite (STS) fo ...

  8. iview Tooltip换行及应用

    第一种: <Tooltip placement="bottom"> <Button>Multiple lines</Button> <di ...

  9. C语言中的32个关键字

    C语言中的32个关键字 数据类型关键字(12个) (1)     char:声明字符型变量或函数 (2)     double:声明双精度变量或函数 (3)     enum:声明美剧类型 (4)   ...

  10. IIS7.0/8.0的错误HTTP Error 500.19 - Internal Server Error ,错误代码为0x80070021

    最近在部署项目的时候,总是出现了这个问题. 大概原因为IIS7.0的安全设定相比前版本有很大的变更.IIS7.0的安全设置文件在%windir%\system32\inetsrv \config\ap ...