DS博客作业06--图
1.本周学习总结(0--2分)
1.思维导图
2.谈谈你对图结构的认识及学习体会。
1.图相对于树,结构更加复杂。图包括边权重,节点的关键字,节点与节点之间的对应关系。图一般由邻接表和邻接矩阵存储,邻接表和邻接矩阵的结构体定义不同,相对来说,邻接矩阵一般用二维数组存储数据,操作相对于邻接表来说更简单。邻接表采用头结点加链表的形式存储数据,在构建邻接表的时候一遍要借助二维数组辅助建图。
2.PTA实验作业(6分)
要求挑3道题目写设计思路、调试过程。设计思路用伪代码描述。题目选做要求:
题目必须是编程题,不要函数题!!!!!
2.1.题目1:题目名称:7-1 图着色问题 (25 分)
2.1.1设计思路
定义结构体
int main()
{
AdjGraph* G;
输入节点数,边数,颜色数
建图
输入配色方案
for (i = 0; i < v; i++)
{
判断每个方案是否符合条件
}
return 0;
}
int Color(AdjGraph * G,int v)
{
int a[600];
int i,sum=0,star,end;//sum用于标记颜色数目,star和end用于比较颜色是否重复
for(i=0;i<600;i++)
{
a[ ]初始化
}
for (i = 1; i <= G->n; i++)
{
输入数据并标记
}
for (i = 0; i < 600; i++)
{
计算颜色数
}
if (sum != v)//颜色不匹配退出
return 0;
ArcNode* p;
for (i = 1; i <= G->n; i++)
{
p = G->adjlist[i].firstarc;
star = G->adjlist[i].data;
while (p != NULL)
{
end = p->adjvex;
end = G->adjlist[end].data;
if (end == star)//颜色重复结束程序
return 0;
p = p->nextarc;
}
}
return 1;
}
void CreateAdj(AdjGraph * &G, int n, int e)//创建图邻接表
{
int i, j, k;
ArcNode* p;
G = new AdjGraph;
for (i = 0; i <= n; i++)
邻接表初始化
static int g[MAXV][MAXV];
for (k = 0; k < e; k++)
{
建邻接矩阵
}
for (i = 1; i < n + 1; i++)
{
for (j = 1; j < n + 1; j++)
{
if (g[i][j] == 1)
{
转换为邻接表
}
}
}
G->e = e;
G->n = n;
}
2.1.2代码截图(注意,截图,截图,截图。不要粘贴博客上。)
2.1.3本题PTA提交列表说明。
Q1:出现多种错误,答案只有部分正确。
A1: 重新建图,重新设计算法,却无法突破最大图,经过计算,发觉在初始条件要设置MAXV增加MAXV的大小来解决最大图的问题。
2.2.题目2 题目名称:7-3 六度空间 (30 分)
设计思路
建结构体
int main()
{
AdjGraph *G;
输入边n节点e
CreateAdj(G,n,e);//建图
for(i=1;i<=G->n;i++)
{
根据广度遍历输出结果
}
return 0;
}
void CreateAdj(AdjGraph *&G,int n,int e)//创建图邻接表
{
建图
}
void BFS(AdjGraph *G,int i,int&count) //v节点开始广度遍历
{
广度遍历一层一层的进行统计一个节点六度空间范围内的节点数
}
2.2代码截图
2.2提交列表
Q1:出现多种错误,段错误,运行超时。
A2:原因算法设计不科学,在设计MAXV时考虑不充分,需要增大MAXV的数值
Q2:经过测试还是有很多错误。
A2:经过检查,发现对层次的判定设置的条件不符合规范,要设置一个last存放最后的数,用tail比较出队列的数,判断队列的层次。
2.3 题目3 :7-4 公路村村通 (30 分)
设计思路
公路村村通可以采用Prim算法或者Kruskal算法解决问题,本题我采用Prim算法设计,同时加以改造,课本上的Prim算法有漏洞,最后会出现环路,我采用visited数组辅助判断,防止出现重复边
代码截图
提交列表
Q1:算法设计太复杂,时间复杂度太高达到O(n3)
A1:一开始没有理解题目,自己设置算法,算法思路是先找出最小边,之后不断找最小边,只要这个边连接的节点没有被遍历过,就可以加上它的权重进行统计,反之就不统计
后来发觉自己没有理解算法,采用Prim算法进行解题
Q2:后来采用Prim算法,结果发现课本中的算法有漏洞。
A2:课本中的算法会出现环路,后来我采用visited数组进行辅助判断得出结果。
3、上机考试错题及处理办法(-2--2分)
3.1.截图错题代码
上机考试时代码量不够,公路村村通和六度空间的代码都没打,考试的时候直接放弃
3.2 错的原因及处理方法
错误原因:没有打代码
没有打代码的原因:没有跟上老师的步伐,老师开始讲图的时候我还在学树,老师讲完图的时候我才刚开始,最后还在忙于学习图。
处理办法:不知道,打一题代码经常要5个小时,不断地调试不断地纠错,一天能打完两道题就已经很多了。跟不上老师的步伐,学习效率低,理解力差。
上机考试的代码我后面有打,六度空间和公路村村通两道题花了我十个小时的时间,总体来说效率虽然很低,但是不愿放弃。