zoukankan      html  css  js  c++  java
  • DS博客作业06--图

    1.本周学习总结

    1.思维导图

    2.学习体会

    在本章中学习了图的相关知识,图形数据结构主要研究形状和图形数据元素之间的关系,与一般数据结构不同,它必须要反映数据所对应元素之间的几何关系和拓扑关系。并且图通常是指由若干个图形数据元素按一定关系所组成的有序集,一般称为表,如果这些数据元素之间具有邻接关系,成为线性表,否则称为非线性表,线性表是由若干个节点组成的有序组合。图既方便又有很多应用,比如运用优先遍历和深度优先遍历,做出一系列应用,以及邻接表和邻接矩阵的选择,还有公路通车问题,旅游规划问题等等。

    2.PTA实验作业

    2.1题目一:图着色问题

    图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
    但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
    

    2.1.1设计思路(伪代码)

    void CreateMGraph(MGraph &g, int n, int e)//建图
    	定义整型a1, a2和i,j;
    	g.n = n;
    	g.e = e;
    	
    	for (i从1到g.n++)
    	{
    		for (从1到g.n++)
    		{
    			g.edges[i][j] =等于 0;
    		}
    	}
    	for (i 从0到g.e)
    	{
    		输出a1,a2;		
                    并使g.edges[a1][a2] = 1;
    		g.edges[a2][a1] = 1;
    	}
    }
    void JudgeColor(MGraph g, int n, int colors)//判断着色是否正确
    定义整型color[MAXV];
    	memset(color, -1, sizeof(color));
    	定义整型i, j, flag = 1, count = 0;
    	for (i从1到n++)
    	{
    		输出color[i];
    		for (j从1到n++) {
    			if (color[i] 等于 color[j])
    			{
    				则使flag = 0;
    				结束循环;
    			}
    		}
    		if (flag 等于1)count++;
    		flag = 1;
    	}
    	if (count 不等于 colors) {
    		输出no并返回;
    	} 
    	for (i从1到n) {
    		for (从i+1到n) {
    			if (g.edges[i][j] == 1 && color[i] == color[j] && i != j) {
    				输出no并返回;			}
    		}
    	}
    	输出yes并返回;
    }
    
    

    2.1.2代码截图




    2.1.3提交列表及说明


    A1:第一个编译错误?
    Q1:我傻的不行,忘记改编译器,一直都是c
    A2:部分正确是为啥?
    Q2:我把循环条件改错了,应该是小于等于,我打成了小于。

    2.2题目二:修建道路

    N个村庄,从1到N编号,现在请您兴建一些路使得任何两个村庄彼此连通。我们称村庄A和B是连通的,当且仅当在A和B之间存在一条路,或者存在一个存在C,使得A和C之间有一条路,并且C和B是连通的。
    已知在一些村庄之间已经有了一些路,您的工作是再兴建一些路,使得所有的村庄都是连通的,并且兴建的路的长度是最小的。
    

    2.2.1设计思路(伪代码)

    int main()
    {
            输入n;
    	定义整型a,b,i,j;
    	for(i从1到e)
    	{
                      输入a.b并使G[a][b]=G[b][a]=1;
    	}
    	定义整型k;
    	for(i从1到n)
    	{
    		double m=n;
    		k=SixBFS(i);
    		printf("%d: %.2f%%
    ",i,k/m*100);
    	}
    	返回0;
    }
    int SixBFS(int v)
    {
    	定义整型count=1,level=0;
    	               last=v,tail;
    	                i;
    	                visited[10001]={0};
    并使	visited[v]=1;
    	queue<int> qu;
    	qu.push(v);
    	while(队不为空)
    	{
    		v=qu.front();
    		出队;		
                  for(i从1到n)
    		{
    			if(G[v][i]等于1&&!visited[i])
    	    	{
    			    count递增;
    			    visited[i]=1;
    		    	qu.push(i);
    			    tail=i;
    		    }
    		}
    		if(last等于v)
    		{
    			level递增;
    			last=tail;
    		}
    		if(level==6)break;
    	}
             返回 count;
    }
    

    2.2.2代码截图




    2.2.3提交列表及说明


    A1:编译错误?
    Q1:就是普通的编译错误,忘记加分号了
    A2:运行超时?
    Q2:我的循环出了毛病,每次都是这里不太清楚。

    2.3题目三:六度空间

    2.3.1设计思路(伪代码)

    
    

    2.3.2代码截图



    2.3.3提交列表及说明

    3.上机考试错题及处理办法

    3.1.1截图错误代码


    当时没写,无错误代码

    3.1.2错误原因及处理办法

    当时着急,没有时间,也没有好好理解,所以没写,后来做了一下,正确代码如下。

    3.2.1截图错误代码



    3.2.2错误原因及处理方法

    这道题我得了4分,因为老师的提醒,我的结构等都是直接复制的当时第一题,然后我输出了一个提示,因为时间紧张,没法仔细想,只能稍稍理解题意,有个大概的思路就要结束考试了。
    处理方法如下:


    3.3.1截图错误代码


    无错误截图,考试时没有打

    3.3.2错误原因及截图

    请看上面编程题,因为没有时间,pta也没熟悉,所以没打出来。

  • 相关阅读:
    使用vue自定义组件以及动态时间
    vue案列
    解决adb devices无法连接夜神模拟器
    手动解除浏览器跨域限制
    HBuilder实现WiFi调试Android
    Spring mvc文件下载
    3大框架Struts、Hibernate、Spring简单了解
    简单了解ajax
    使用本地计划任务定时关闭azure虚拟机
    调整虚拟机的尺寸
  • 原文地址:https://www.cnblogs.com/20000519yxn/p/10958976.html
Copyright © 2011-2022 走看看