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个小时,不断地调试不断地纠错,一天能打完两道题就已经很多了。跟不上老师的步伐,学习效率低,理解力差。
上机考试的代码我后面有打,六度空间和公路村村通两道题花了我十个小时的时间,总体来说效率虽然很低,但是不愿放弃。
posted @ 2019-06-02 15:25  1112+  阅读(207)  评论(0编辑  收藏  举报