DS博客作业06-图

1.本周学习总结

1.1 思维导图

DS博客作业06-图_第1张图片

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

在图这一章中,我学到的内容有:
1.在对应关系上,图不同于线性表和树。线性表中的元素是“一对一”的关系,树中的元素是“一对多”的关系,而图中的元素是“多对多”的关系。
2.图是一种复杂的非线性结构,在图结构中,每个元素都可以有零个或多个前驱,也可以有零个或多个后继,也就是说,元素之间的关系是任意的。
3.图的存储结构有邻接表、邻接矩阵等结构。图的遍历也可分为深度优先遍历和广度优先遍历。
疑惑的地方:
.对于求从一个顶点到其余各顶点的最短路径的算法不理解。

2.PTA实验作业(6分)

要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求:

题目必须是编程题,不要函数题!!!!!

2.1.题目1:六度空间

2.1.1设计思路(伪代码)

利用广度遍历逐层遍历图
.定义N是结点,M是边以及定义顶点访问标记数组visited[]和关联数组Adj[][]
主函数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.1.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

DS博客作业06-图_第2张图片
DS博客作业06-图_第3张图片
DS博客作业06-图_第4张图片

2.1.3本题PTA提交列表说明。

PTA提交列表中的每个错误详细说明为什么及如何解决。

Q1:一开始把percentage定义成int类型的数据,然后percentage的计算式写成percentage=100*BFS(i)/N;
A1: 把原来的数据类型改成double类型数据,再把percentage的计算式改成double percentage=100.00*BFS(i)/N;

Q2:对广度遍历函数代码的理解不透,for循环中的循环条件少了一个“=”
A2:  将i

2.2.题目2:7-1 图着色问题

2.2.1设计思路(伪代码)

int main()
. MGraph g;
.定义color[502],flag=0,num=0;
. 定义 v,e,k,n,i,j;
. 输入 v,e,k;
. Create(g,v,e);//创建邻接矩阵
    输入方案个数n;
.while   n--
    
        int visited[502]={0};
        num=0;flag=0;
        for i=1 to i<=g.n
        {
            输入color[i];
            if(visited[color[i]]==0)
            {
                visited[color[i]]=1;
                num++;
            }
            end if
.end for
        if(num!=k)
        flag=1;
. for i=1 to i<=g.n
  .for j=1 to j

2.2.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

DS博客作业06-图_第5张图片
DS博客作业06-图_第6张图片
DS博客作业06-图_第7张图片

2.2.3本题PTA提交列表说明。

DS博客作业06-图_第8张图片

Q1:最大图的测试点过不去,范围不够大导致答案错误
A1:将color[500]改为color[502]

2.3.题目3:公路村村通

2.3.1设计思路(伪代码)

prim函数
循环将节点1的相邻边之间的权重存入数组lowcost,作为最小权重
for循环找出n-1个节点的最小权重
    for循环遍历各个节点
        if(权重不为0且不为无穷)
            min记住此时权重,k记住该节点 j
    if(min为无穷)
        非连通图,返回-1
    num加上此时min,为修路最小花费
    for(遍历节点调整边关系)
        if(权重不为0且两点间权重小于lowcost存的)
            调整lowcost为该权重,同时 j 的closest值改为k
    end for
end for
输出最小花费num

2.3.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)

DS博客作业06-图_第9张图片
DS博客作业06-图_第10张图片
DS博客作业06-图_第11张图片

2.3.3本题PTA提交列表说明。

DS博客作业06-图_第12张图片

PTA提交列表中的每个错误详细说明为什么及如何解决。

Q1:使用了c++语法,没有更换编译器
Q2:数组的容开小了,容易越界;

3.上机考试错题及处理办法(-2--2分)

题目:6-2 jmu-ds-邻接矩阵实现图的操作集 

3.1.截图错题代码

DS博客作业06-图_第13张图片
DS博客作业06-图_第14张图片
DS博客作业06-图_第15张图片

3.2 错的原因及处理方法

这题是对图的基本操作(深度优先遍历、广度优先遍历、建图)的考察。这道题在考试的时候我还是没能写出来,它提示我答案错误。
在写深度遍历和广度遍历的函数时,两个for循环里的if条件语句我漏写了一个g.edges[v][i]=1,然后检查发现了这个错误并改过来之后发现还是存在
错误,考试结束后,跟别的同学的代码做对比发现,建图和深度遍历的函数都完全正确。问题在于广度遍历中,循环时的循环条件写错了,写成了
i

你可能感兴趣的:(DS博客作业06-图)