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!

posted @ 2019-06-02 08:47  simonsC  阅读(224)  评论(0编辑  收藏  举报