DS博客作业06--图
1.本周学习总结(0--2分)
1.思维导图
2.谈谈你对图结构的认识及学习体会。
学习了图,我感觉图比树更上了一个层次,元素之间的关系也更复杂了,并且理论知识也比较多,有些跟不上老师的进度,这节上完还来不及消化,又开始了下一节,在预习时候会做的题记得的概念过了下一节就变得模糊了,而且对AOE网和关键路径不太理解,临近期末要抓紧复习。
2.PTA实验作业(6分)
2.1.题目1:7-4 公路村村通
2.1.1设计思路
const int maxn=1001; //定义静态变量为数组大小
int dist[maxn], C[maxn][maxn], parent[maxn]; //定义dist数组记录成本,C数组作为邻接矩阵,parent数组记录路径
int findMin(){
//找出最小边,并返回最小边对应的编号
}
void Prim(int s){
//记录父节点 (路径)
//记录权值
while(1)
{
// 调用findMin()求得最短路径
//计算总的路径长度
//收录后dist的值要变为0,表明该结点v已被收录
}
//如果所有结点都收录完毕,则输出总费用
//否则,则说明有些该图里面有回路 ,无法生成树
int main(){
for(int i=1; i<=N; i++)
//初始化各边
for(int i=1; i<=M; i++)
//建立邻接矩阵
Prim(1); //调用Prim函数得出最小生成树,及其权值;
}
2.1.2代码截图
2.1.3本题PTA提交列表说明
Q1:一开始在编译器上可以通过,提交就编译错误,以为是编译器的问题;
A1:仔细看了代码之后发现打头文件时候多了个点
Q2:改了之后还是有两个测试点不过,最大N和M,不连通;
A2:后边问了同学之后改进了对图是否连通的判断条件后就好了
2.2.题目2:7-7 旅游规划
2.2.1设计思路
int node [505][505]; //定义数组node记录城市;
int dis[505][505]; //定义dis记录城市之间的路径长度
int main()
{
int n,m,s,d,i,j,k,x,y,q,w; //定义n,m,s,d记录城市个数,路径数,出发地和目的地编号
cin>>n>>m>>s>>d; // 输入城市个数,路径数,出发地和目的地编号
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{ //给邻接矩阵初始化
if(i==j)
for(i=0;i<m;i++)
//给出每条高速公路的信息
node[x][y] = node[y][x] = q; //路径长度
dis[x][y] = dis[y][x] = w; //路径的花费
if(node[i][j]>node[i][k]+node[k][j]||(node[i][j]==node[i][k]+node[k][j]&&dis[i][j]>dis[i][k]+dis[k][j]))
{
//找出花费最低且路径最短的一条路径
}
//输出该路径的路径长度和花费
2.2.2代码截图
2.2.3本题PTA提交列表说明
2.3.题目3:7-1 图着色问题
2.3.1设计思路
int color[501]={0}; //定义数组color记录颜色;
int g[501][501]={0}; //定义数组g来建立图的邻接矩阵
int search(int v); //search函数用来判断两相邻
int v,E,K,N,a,b,i,j; //v,E,K分别记录顶点数,边数,颜色数;a,b记录每条边的两个顶点
for(i=0;i<E;i++)
//给邻接矩阵初始化
cin>>N; //输入待检查的颜色分配
set<int>col; //建立一个存放int的set容器。
for(int j=1;j<=v;j++)
//输入每个顶点的颜色
//向集合中插入颜色;
if(col.size()==K&&search(v)==true) //判断该集合中的颜色数是否等于规定颜色数,判断两相邻顶点颜色是否相同
//满足条件则输出yes
//否则输出No;
//清空数组
int search(int v)
{
//判断相邻结点颜色是否重复,重复返回false,否则返回true;
}
2.3.2代码截图
2.3.3本题PTA提交列表说明
Q1:开始是用邻接表的做法,但就有一个测试点过不了,老是并不知道错哪
A2:去论坛上看了网友的做法,感觉这个更加易懂并且代码简便,就用了这个做法
3、上机考试错题及处理办法(-2--2分)
.1.截图错题代码
6-3 jmu-ds-拓扑排序
3.2 错的原因及处理方法
没给visited[i]和G->adjlist[i].count=0初始化,每次判断都会跳到error!