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%%\n",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也没熟悉,所以没打出来。