1.本周学习总结
1.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代码截图(注意,截图,截图,截图。不要粘贴博客上。)
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代码截图(注意,截图,截图,截图。不要粘贴博客上。)
2.2.3本题PTA提交列表说明。
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代码截图(注意,截图,截图,截图。不要粘贴博客上。)
2.3.3本题PTA提交列表说明。
PTA提交列表中的每个错误详细说明为什么及如何解决。
Q1:使用了c++语法,没有更换编译器
Q2:数组的容开小了,容易越界;
3.上机考试错题及处理办法(-2--2分)
题目:6-2 jmu-ds-邻接矩阵实现图的操作集
3.1.截图错题代码
3.2 错的原因及处理方法
这题是对图的基本操作(深度优先遍历、广度优先遍历、建图)的考察。这道题在考试的时候我还是没能写出来,它提示我答案错误。
在写深度遍历和广度遍历的函数时,两个for循环里的if条件语句我漏写了一个g.edges[v][i]=1,然后检查发现了这个错误并改过来之后发现还是存在
错误,考试结束后,跟别的同学的代码做对比发现,建图和深度遍历的函数都完全正确。问题在于广度遍历中,循环时的循环条件写错了,写成了
i