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

    kahn算法:

    1. 在有向图中选一个入度为零的点,并输出

    2. 从图中删除所有与该点相关的边

    3. 重复上述两步,直至所有顶点输出,或者当前图中不存在无前驱的顶点为止,后者代表我们的有向图是有环的,因此,也可以通过拓扑排序来判断一个图是否有环。

    void kahn()
    {
        stack<int> s;
        int r[6]; //记录每个点的入度
        for(int i=0;i<6;i++){
            r[i]=0;
        }
     
        //统计每个点的入度
        int num=0;
        for(int i=0;i<6;i++){
            num=0;
            for(int j=0;j<6;j++){
                if(a[j][i] == 1) num++;
            }
            r[i]=num;
        }
     
        //把入度为零的入栈
        for(int i=0;i<6;i++){
            if(r[i]==0) s.push(i);
        }
     
        //count用于计算输出点的个数
        int count=0;
        while(!s.empty()){
            int x=s.top();
            s.pop();
            cout<<x<<endl;
            for(int i=0;i<6;i++){
                if(a[x][i] == 1){
                    r[i]--;
                    if(r[i]==0) s.push(i);
                }
            }
            count++;
        }
     
        if(count == 6) cout<<"此图无环"<<endl;
        else cout<<"此图有环"<<endl;
    }
    

    深度优先搜索:

    void DFS(int u)
    {
        visit[u] = true;
        for(int i=0;i<6;i++){
            if(a[u][i]==1 && visit[i]==false){
                DFS(i);
            }
        } 
       // 每次在递归结束时入栈
        // 即当前顶点没有指向其他顶点的边了,也就是一条路径的最后一个顶点
        s.push(u);
    }
    

      

  • 相关阅读:
    图形设计 X11
    软件安装 RPM SRPM YUM
    如何将excel表格中的纯数字删掉 空白行,然后删除
    考试机
    程序编译与运行
    基础设定与备份策略
    开机流程 模块管理 Loader
    让所有Excel数据格全部乘 某个数
    转:JDK1.8-Stream()使用详解
    转:IK分词原理
  • 原文地址:https://www.cnblogs.com/jiangxiaobin1996/p/9309938.html
Copyright © 2011-2022 走看看