zoukankan      html  css  js  c++  java
  • 拓扑排序

    思路:找入度为0的点->删边 ->重复直接找不到入度为0的点。

    #include<iostream>

    #include<vector>

    using namespace std;

     

    const int MAXN=500+10;

    int indegree[MAXN];

    vector<int>V[MAXN];

     

    void init(int n){                               //初始化

        memset(indegree,0,sizeof(indegree));

        for(int i=1;i<=n;i++){

            V[i].clear();

        }

    }

     

    int findZeroDegree(int n){        //找入度为0的点

        for(int i=1;i<=n;i++){

            if(indegree[i]==0){

                return i;

            }

        }

        return -1;

    }

     

    void cutDegree(int node){                  //相关点的入度-1

        for(int i=0; i<V[node].size(); i++){

            indegree[V[node][i]]--;

        }

    }

     

    void topSort(int n){

        int node;

        int save[MAXN];                       //存储关键路径

        int k=0;

        for(int cnt=0; cnt<n; cnt++){

            node = findZeroDegree(n);

            indegree[node] = -1;              //标志已经用过的顶点

            save[k++] = node;                 //存储找到的顶点

            cutDegree(node);

        }

        for(int i=0;i<n-1;i++){

            cout<<save[i]<<" ";

        }

        cout<<save[n-1]<<endl;

    }

  • 相关阅读:
    51nod_1445 变色DNA 最短路模板 奇妙思维
    51nod_1459 最短路 dijkstra 特调参数
    UVA_10653 公主与王子 #刘汝佳DP题刷完计划
    HOJ 13819 Height map
    51nod_1255字典序最小的子序列
    电梯设计需求调研报告
    梦断代码读后感
    求一循环数组的最大子数组的和
    求二维数组中最大子数组的和
    四则运算
  • 原文地址:https://www.cnblogs.com/cbyniypeu/p/3388794.html
Copyright © 2011-2022 走看看