ds第六章学习记录
Posted drgnibasaw
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ds第六章学习记录相关的知识,希望对你有一定的参考价值。
图的定义
- 邻接矩阵 结构简单,操作方便
稀疏图将浪费大量的空间
- 邻接表 (类比 树 --- 孩子表示法?)
操作复杂
注意邻接链表的结构体定义 --- 不要搞混不要被绕晕啊! 嵌套太多了 有时用指针 还要看清给的int还是char
typedef struct ArcNode { int adjvex; struct ArcNode * nextarc; Otherinfo info; }ArcNode; typedef struct VNode { VerTexType data; ArcNode *firstarc; }VNode,AdjList[MVNum]; typedef struct { AdjList vertices; int vexnum,arcnum; }ALGraph;
深度优先遍历
利用递归思想 连通图与非连通图的区别
--- 非连通图 遍历每个连通分量 ! (注意遍历的顺序呀
void DFS(AMgraph G,int v) {//图G为邻接矩阵类型,从第v个顶点出发深度优先搜索遍历图G cout<<v; bool *visited = new bool[MVNum]; visited[v]=true; int w; for(w=0;w<G.vexnum;w++) if((G.arcs[v] [w] !=0)&&(!visited[w])) DFS(G,w); //G.arcs[v] [w] ! =0表示w是v的邻接点, 如果w未访问, 则递归调用DFS }
广度优先遍历
队列 (注意队列不为空 循环 --- 直到所有顶点都被遍历
先访问再入队?还是直接入队
PTA笔记
1.在有向图的邻接表中,从一bai顶点出发的弧链du接在同一链表中zhi,邻接表中结点的个数恰为图中弧的数目dao,所以顶点入度之和为弧数和的一倍,若为无向图,同一条边有两个结点,分别出现在和它相关的两个顶点的链表中,因此无向图的邻接表中结点个数的边数的2倍
2
-
- prim算法是通过每步添加一条边及其相连的顶点到一棵树,从而逐步生成最小生成树;
-
- Kruskal 算法是维护一个森林,每一步把两棵树合并成一棵;
https://blog.csdn.net/weixin_43751983/article/details/103392635
3
全连通图的定点 n 和边数 m
m = n(n-1)/2
那么du边 m = 22 时, 图 G:
n(n-1)/2 >= 22
n >= 8
而且,当 n = 7 时,全连通图 G‘ 的边数 m = 21
当我们把第zhi 8 个定点加上来,必然还dao要再在这个定点和上面7个定点相连,以便构成第 22 边
(8个顶点不足以构成22边非连通图)
加上第 9 个定点后,可以在 (8, 9) 之间构成第22边,或者,选择 8, 或 9 作为孤立点,构成非连通图
至少有 9 个顶点
PTA作业和实践 007
在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。)
设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 50)。池心岛是以 (0, 0) 为圆心、直径15米的圆。给定池中分布的鳄鱼的坐标、以及007一次能跳跃的最大距离,你需要告诉他是否有可能逃出生天。
输入格式:
首先第一行给出两个正整数:鳄鱼数量 N(≤)和007一次能跳跃的最大距离 D。随后 N 行,每行给出一条鳄鱼的 ( 坐标。注意:不会有两条鳄鱼待在同一个点上。
输出格式:
如果007有可能逃脱,就在一行中输出"Yes",否则输出"No"
sample
14 20 25 -15 -25 28 8 49 29 15 -35 -2 5 28 27 -29 -8 -28 -20 -35 -25 -20 -13 29 -30 15 -35 40 12 12
yes4 13 -12 12 12 12 -12 -12 12 -12
no
- 存储结构 --- 对于每一个点 都有x、y坐标
- 第一步能否可以跳过
- 递归 能否从某一点跳到某一点 重复步骤
-
-
深度优先遍历时,对每一个访问的结点设置该节点已经访问过,并判断从该节点是否可以一次跳到岸边 可以的话直接返回
-
否则 对其他结点判断,如果该节点可以到达且没有访问过 就对这个结点进行深度优先遍历
-
-
- 能否跳到河对岸
我的bug
- 一开始没想到分开第一步单独写出来 想了很久 写了一堆乱七八糟的函数----------一定要想清楚才下手!
- visit数组记得要初始化为1! 死活写不出来
- 我先是用了结构体数组 想用指针去标记的 结果发现写不进数据 是因为我没有正确的给我的结构体数组分配空间 都成了空指针 然后我就把指针删去了 直接用静态数组 没必要那么复杂了
改进
- 判断007能否从A点直接跳到湖岸,当007步长大于A点到湖岸的距离时,说明可以到达换,即d>= 50-| x | 或者d>= 50-| y |
- 循环里可以加一个break 就是flag判断那里 节省一点时间 如果给的数据量变大就能看出好处了
https://www.cnblogs.com/X-Do-Better/p/9048604.html
以上是关于ds第六章学习记录的主要内容,如果未能解决你的问题,请参考以下文章