zoukankan      html  css  js  c++  java
  • 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个小时,不断地调试不断地纠错,一天能打完两道题就已经很多了。跟不上老师的步伐,学习效率低,理解力差。
    上机考试的代码我后面有打,六度空间和公路村村通两道题花了我十个小时的时间,总体来说效率虽然很低,但是不愿放弃。
    
  • 相关阅读:
    【转】VB 技巧一
    VB中的trim()函数
    转:vb实现老板键功能
    VB为自己的程序设定消息(可接收处理)
    RegisterHotKey的具体使用方法
    GetPrivateProfileString
    在VB语言中,DOEVENTS的具体的用法和含义
    VB中的ADO数据对象编程
    jquery操作select下拉列表框
    jQuery对Select的操作集合
  • 原文地址:https://www.cnblogs.com/1112wlt/p/10963077.html
Copyright © 2011-2022 走看看