• 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个小时,不断地调试不断地纠错,一天能打完两道题就已经很多了。跟不上老师的步伐,学习效率低,理解力差。
    上机考试的代码我后面有打,六度空间和公路村村通两道题花了我十个小时的时间,总体来说效率虽然很低,但是不愿放弃。
    
  • 相关阅读:
    Path Sum II
    Convert Sorted Array to Binary Search Tree
    Construct Binary Tree from Inorder and Postorder Traversal
    Construct Binary Tree from Preorder and Inorder Traversal
    Maximum Depth of Binary Tree
    Binary Tree Zigzag Level Order Traversal
    Binary Tree Level Order Traversal
    Same Tree
    Validate Binary Search Tree
    Binary Tree Inorder Traversal
  • 原文地址:https://www.cnblogs.com/1112wlt/p/10963077.html
Copyright © 2020-2023  润新知