第五次作业——05图

本周学习总结涵盖了图结构的理解和应用,包括六度空间问题、图着色问题和公路村村通问题的解决思路。通过思维导图整理知识点,深入探讨了图结构的算法实现难点。同时,分享了PTA实验作业的完成情况,分析了代码实现中的问题,并讨论了上机考试中遇到的错误及其处理方法。
1.本周学习总结

1.思维导图

1490929-20190608215713867-1402261304.png

2.谈谈你对图结构的认识及学习体会。

图结构类似于数,只不过各个节点在空间上相关联。在算法上思路非常多样,虽然可以在逻辑上明确,想要用代码去实现挺难的。

2.PTA实验作业(6分)

2.1.题目1:7-3 六度空间

2.1.1设计思路

创建队列q,t记录节点所在层数,number记录与i距离不超过6的节点个数
    i先进栈
    置visited[i]=1
    while队列不为空
        令temp=出队节点
        遍历temp所连接的节点
            当该节点没有遍历过
                 把该节点入队列
                         number++
         如果遍历到的节点在第六层,返回所得的number值

2.1.2代码截图

1490929-20190608230156934-1697021506.png

1490929-20190608230144884-614805401.png

2.1.3本题PTA提交列表说明。

1490929-20190608230421979-1790141177.png

  • 出现段错误,数据不够大。
  • 混用了BFS和DFS,导致部分正确。

2.2 题目2:7-1 图着色问题

2.2.1设计思路

int map[maxn][maxn],judge[maxn][maxn];
int color[maxn],tong[maxn];
int n,m,k 存放顶点数、边数、以及颜色数
int main()
{
    输入数据 
    init();
    for(int i = 0; i < m; i ++)
    {
        输入长宽,得到矩阵 
        scanf("%d %d",&x,&y);
        map[x][y] = map[y][x] = 1;
    }

        for(int i = 0; i < maxn; i ++)
        {
            if(tong[i])
                flag++;
            else
                返回
        }
        int 计数器 = 0;
        如恰好等于染色数目
         否
        else if(!m)
         是
        else 
        {
            for(int i = 1; i <= n; i ++)
            {
                for(int j = i + 1; j <= n; j ++)
            {
 if(map[i][j]!=maxn&&color[i]!=color[j])
 计数器 ++;
 else if(map[i][j]==maxn)
 到达边界,重新开始循环 
 else if(map[i][j]!=maxn&&color[i]==color[j])
        {   
    返回
        }
 if(index == -1) 返回
 if(index == m)是
 else否

2.2.2代码截图

1490929-20190608233008612-136793495.png

1490929-20190608233015319-857248166.png

1490929-20190608233020404-586954757.png

2.2.3本题PTA提交列表说明.

1490929-20190608233038423-1808583479.png

2.3 题目3 7-4 公路村村通

2.3.1设计思路

void 普里姆算法 
    int cnt=1, Totalcost=0;
    for(int i=1; i<=N; i++)
        parent[i]=s; 记录父节点 路径 
        dist[i]=C[s][i];
    
    parent[s]=-1;
    dist[s]=0;
    int v;
    while(1){
        v=findMin();
        if(v==-1)break;
        Totalcost+=dist[v];
        cnt++;
        收录后dist的值要变为0,表明该结点v已被收录 

    if 如果所有结点都收录完毕,则输出总费用 
       否则,则说明有些该图里面有回路 
    
  scanf("%d%d", &N, &M);
    初始化各边 
   for(int i=1; i<=M; i++){
        scanF三个正整数
        C[a][b]=C[b][a]=c;

2.3.2代码截图

1490929-20190608233810311-532325788.png

1490929-20190608233816838-806507208.png

2.3.3本题PTA提交列表说明.

1490929-20190608234457903-99395535.png

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

3.1.截图错题代码

1490929-20190608234802628-1052644374.png

1490929-20190608234810359-764313726.png

3.2 错的原因及处理方法

  • 目前还没有找到原因

转载于:https://www.cnblogs.com/cosmosss/p/10969675.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值