DS博客作业06—图

时间:2025-01-21 20:36:26

1.本周学习总结

1.1思维导图

DS博客作业06—图

1.2学习体会

2.PTA实验作业

2.1 图着色问题

图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?

但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。

2.1.1 设计思路

for i=0 to e
输入邻接表新节点
for i=0 to n
定义set类col存储颜色解种类
for j=1 to v
输入颜色存于数组color中
将该颜色存入col中
if check(v)==true 且 col.size()==k //利用set无视相同元素的特点
输出yes
else
输出no
bool check(int v)
for i=1 to v
for j=0 to G[i].size()
遍历邻接表比较与相邻颜色是否相同
return false //颜色相同
return true

2.1.2 代码截图

DS博客作业06—图

DS博客作业06—图

2.1.3 本题PTA提交列表说明

DS博客作业06—图

本题尝试使用vector<vector>方式创建邻接表,大幅压缩代码量

利用set类进行颜色种类计数

2.2 旅游规划

有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。

2.2.1 设计思路


2.2.2 代码截图

2.2.3 本题PTA提交列表说明

2.3 公路村村通

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

2.3.1 设计思路

输入n,e
if e>=n-1
for k=0 to e
输入顶点 权值
权值存入邻接矩阵
调用prim函数
else //一定不连通
输出-1
定义数组lowcost
for i=1 to n
lowcost赋初值
for i=0 to n
min=INF
for j=1 to n
if lowcost[j] 且 lowcost[j]<=min
min=lowcost[j];
k=j;
lowcost[k]=0
if min!=INF
count+1
cost+=min
for j=1 to n
修正lowcost数组
if count==n-1
输出cost
else //不连通
输出-1

2.3.2 代码截图

DS博客作业06—图

DS博客作业06—图

DS博客作业06—图

2.3.3 本题PTA提交列表说明

DS博客作业06—图

Q1:count判定错误,所有非连通无法显示-1

A1:修正为count==n-1

Q2:M<N-1时段错误

A2:主函数中加入对该情况的判定

Q3:最大M,N答案错误

A3:找了好久直到写算法分析时发现lowcost数组初始化的问题

DS博客作业06—图

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

3.1 六度空间

假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

3.1.1

DS博客作业06—图

DS博客作业06—图

DS博客作业06—图

3.1.2

考试时侯的prim算法部分队尾用了qu.front()然后一直debug到收卷

3.2 公路村村通

现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。

3.2.1

见2.3.2

3.2.2

直接在邻接矩阵中使用权值,初始化lowcost数组时不能使用课本的方法