DS博客作业06--图

本文分享了一周内学习图结构的心得,包括图结构的学习体验、广度优先遍历、最小生成树(克鲁斯卡尔算法)、最短路径(Floyd算法)的应用,以及上机考试的反思。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.本周学习总结

1.思维导图

1475050-20190602170430127-53838628.png

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

其实在学习图之前我是有点担心学不好图的,因为之前学树的时候就已经花费了我很大的心力了,而图是一种比树更复杂的结构,但真正学起来的时候却发现图比树还要容易学一点,可能是图的各种操作递归用得比较少和存储结构更容易理解一点把。

2.PTA实验作业

2.1.题目1:7-3 六度空间

2.1.1设计思路

其实就是图的广度优先遍历

定义队列q
将起始节点入队并标记此节点已遍历过
while(队列不空)
{
    p = G->adjlist[q.top()].firstarc;
    q.pop();
    n++;//记录遍历的节点数
    while(p)
    {
        如果p未遍历则将其入队,并标记
        p=p->nextarc; 
    } 
    if(当层的节点已遍历完)
    {
        h++;//遍历的层数+1
        if(h>7)break;//遍历的层数超过7则结束遍历 
    } 
} 
return s;

2.1.2代码截图

1475050-20190601153740983-1441474208.png
1475050-20190601153837087-991437335.png

2.1.3本题PTA提交列表说明。

1475050-20190601153942034-659918407.png

2.2 题目2:修建道路

2.2.1设计思路

其实就是建最小生成树,用克鲁斯卡尔算法做会简单一点

typedef struct
{
    int u;//边的起始顶点
    int v;//边的终止顶点
    int w;//边的权值
}Edge;
定义Edge数组E[MAXV],整型数组vest[MAXV] 
把边存入E中,并按升序排序
初始化数组vest
输入已存在的边并修改vest数组,每输入一次n就+1 
while(n<g.n) 
{
    若边的起点与终点不属于同一个集合
    s+=E.w;
    合并两点所属的集合 
    n++ 
} 
返回s 

2.2.2代码截图

1475050-20190602162641972-1186132922.png
1475050-20190602162712900-891742113.png

2.2.3本题PTA提交列表说明。

1475050-20190602162746594-332318981.png
(其实这道题用并查集的,但我懒得改了,虽然并查集的代码也就十行左右。。。)

2.3 题目3:旅游规划

2.3.1设计思路

最短路径问题,可以用Dijkstra算法或Floyd算法解决,这里我用的是Floyd算法

初始化A和path数组
for(k=0;k<g.n;k++)
    for(i=0;i<g.n;i++)
        for(j=0;j<g.n;j++)
        {
            若从i到j的路径比从i到k再到j的路径短则修改A数组和path数组
            若二者相同则记录两条路径中所花费的钱比较少的那条 
        } 

2.3.2代码截图

1475050-20190602164659489-1869708524.png
1475050-20190602164730915-389796343.png

2.3.3本题PTA提交列表说明。

1475050-20190602164830783-1292526573.png
(其实这道题用Dijkstra算法来做更好,只不过Floyd算法代码比较少,所以我就用Floyd算法来做了。。。)

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

这次考试由于我对部分算法还不太熟练,解题所用的时间过长,导致最终没时间去解其余的题目

3.1.截图错题代码

考试时来不及做,交的代码是输出样例的,就不贴出来了。。。

3.2 错的原因及处理方法

6-1

1475050-20190603003633868-1213862203.png
(别问为什么没有7-3。。。)

转载于:https://www.cnblogs.com/xycm/p/10959687.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值