DS博客作业06--图
1.本周学习总结
1.思维导图
2.谈谈你对图结构的认识及学习体会
通过学习图的一些基本操作,学习了图的两种存储结构:邻接矩阵和邻接表,图的两种遍历方法:深度优先遍历(DFS)和广度优先遍历(BFS)。
深度优先遍历是一个对每个结点查找其邻接点的过程,而广度优先遍历则是搜索了该结点相连的所有结点。通过学习Prim算法
和Kruskal算法,解决了最小生成树问题。还学习了拓扑排序,对一个有向无环图G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,
若边(u,v)∈E(G),则u在线性序列中出现在v之前。这样的线性序列称为满足拓扑次序。
2.1.题目1:7-1 图着色问题
图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?
但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。
2.1.1设计思路
int g[501][501]={0};
int color[501] = { 0 };
int search(int v)
{
遍历邻接矩阵
如果两点(i,j)已连接,且颜色相同color[i]==color[j],返回false
否则返回true
}
int main
{
g[501][501]邻接矩阵输入连接图
color[501]输入并保存颜色
col集合判断颜色数量
如果颜色数量正确和search函数返回true,则输出yes
否则输入no
}
2.1.2代码截图
2.1.3本题PTA提交列表说明。
set col创建了一个col集合,是一种包含已排序对象的关联容器,col.insert(color[j])中把元素color[j]存放进col集合中,
有重复部分不会再被存储,memset(color, 0, sizeof(color)),将color所指向的某一块内存中的后个sizeof(color)字节的内容
全部设置为ch指定的ASCII值,它是对较大的结构体或数组进行清零操作的一种最快方法.
这个写法是借鉴别人的的代码
2.2.题目2:7-4 公路村村通
2.2.1设计思路
void CreateMGraph(int v,int n )
{
邻接矩阵赋初值
如果为对角线上的元素,g[i][j]=0
否则g[i][j]=INF=32767
输入连接图
}
int Prim(int v,int n)
{
prim算法,其中如果当min=INF时输出-1,安全退出函数
否则令 count=count+min
函数最后返回count;
}
int g[1005][1005];
int main()
{
创建邻接矩阵
m=Prim(1,v)从顶点1开始执行prim算法
输出m
}
2.2.2代码截图
2.2.3本题PTA提交列表说明
这个不能取等,还有输出-1的时候要结束
2.3.题目3:六度空间
“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。
然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,
能够体现社交网络关系的一手数据已经逐渐使得“六度空间”理论的验证成为可能。
假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。
2.3.2代码截图
2.3.3本题PTA提交列表说明
3、上机考试错题及处理办法
上机时只打出了两题,回来把公路村村通打了