zoukankan      html  css  js  c++  java
  • 7-14 最短工期

    7-14 最短工期

    模型

    显然是一个有向图
    而且是一个拓扑图,题目模型既是拓扑排序
    

    拓扑排序

    什么是拓扑图

    简单的说就是一个有依赖关系的图,例如完成任务x的时候必须要先完成任务1.2.3.4.5........
    

    什么是拓扑排序

    简单的说就是可以通过这个序列去依次完成任务
    在这个形成的序列中,某一个元素,它的依赖关系一定在它前面
    

    如何获得拓扑序列呢?

    1.首先记录每个点的入度
    2.如果这个存在入度为0的点,说明它没有依赖关系,我就可以把它放进序列中
    3.当我把这个入度为0的点加入序列的时候,我就要把我所指向的点,入度减一
    4.重复执行以上几个操作,直到没有入度为0的点
    

    代码

    
    #include<stdio.h>
    int n,m,ans;
    int g[105][105],d[105],cnt,f[105];
    int  max(int x,int y)
    {
        if (x>y) return x; else return y;
    }
    int main()
    {
        int i,j;
        scanf("%d%d",&n,&m);
        for (i=0; i<n; i++)
            for (j=0; j<n; j++) g[i][j]=-1; // i,j之间是否存在一条边
        for (i=1; i<=m; i++)
        {
            int x,y,z;
            scanf("%d%d%d",&x,&y,&z);
            g[x][y]=z; d[y]++; //每加入一条边  度数加一
           // printf("             %d %d
    ",y,d[y]);
        }
        while (1)
        {
            int flag=0;
            for (i=0; i<n; i++)
            {
    
                if (d[i]==0)
                {
                    d[i]=-1;//防止重复计算
                    flag=1; //是否存在新的入度为0的点
                    cnt++; // 入度为0点也就是加入拓扑序列的总个数
                    for (j=0; j<n; j++) if (g[i][j]!=-1)
                    {
                        d[j]--; // 入度减一
                        f[j]=max(f[j],f[i]+g[i][j]); //选择最长的
                        ans=max(ans,f[j]);
                    }
                   // printf("%d %d
    ",i,d[5]);
                }
            }
            if (flag==0) break;
        }
        //printf("%d
    ",cnt);
        if (cnt!=n) printf("Impossible
    ");
        else printf("%d
    ",ans);
        return 0;
    }
    
    
    
  • 相关阅读:
    [LeetCode]Binary Tree Inorder Traversal
    [LeetCode]Binary Tree Preorder Traversal
    [LeetCode]Number of 1 Bits
    [LeetCode]Best Time to Buy and Sell Stock IV
    第四章 线程
    第三章 进程描述和控制
    第二章 操作系统概述
    第一章 计算机系统概述
    Qt创建对话框的三种方法
    strdup函数
  • 原文地址:https://www.cnblogs.com/HQHQ/p/10993396.html
Copyright © 2011-2022 走看看