zoukankan      html  css  js  c++  java
  • Toposort(拓扑排序)dfs递归模板

    最近刷了几题拓扑排序的题,记录一下拓扑排序

    在有向图中,并且按照一定的规则(题目所给的规则)排序。如果图中出现了有向环的话就无法排序了。

     1 int gap[maxn][maxn];//记录下有向边
     2 int topo[maxn], c[maxn], t;//topo数组用来保存最后的排序结果,
     3                                              //c数组用来判断是否有访问过或者成环
     4                                              //t 用来记录当前topo数组的下标值
     5 bool dfs(int u){
     6     c[u] = -1;//标记当前访问点
     7     for(int v = 1; v<=n; v++)   if(gap[u][v]){
     8         if(c[v]< 0) return false;//形成有向回环,返回错误
     9         else if(!c[v] && !dfs(v) )  return false;
    10     }
    11     c[u] = 1;//标记访问完成
    12     topo[--t] = u;//通过--t就可以完成从后往前保存数据(因为递归是从后往前)
    13     return true;
    14 }
    15 bool toposort(){
    16     t = n+1;//t为当前的n个点数(n从0开始的话只要t = n,和将所有 <=n 换成 <n)
    17     ms(c, 0);
    18     for(int u = 1; u<=n ;u++)
    19         if(!c[u])
    20             if(!dfs(u)) return false;
    21     return true;
    22 }

    附上相关题目:1)http://codeforces.com/problemset/problem/510/C

  • 相关阅读:
    jQuery 核心
    Js实现内容向上无缝循环滚动
    浅析CSS postion属性值用法
    JS原生Ajax请求
    详解SQL集合运算
    Windows上开启IIS
    poj 4618 暴力
    hdu 4614 线段树
    poj 3468 线段树
    hdu 1698 线段树成段更新
  • 原文地址:https://www.cnblogs.com/denghaiquan/p/6668340.html
Copyright © 2011-2022 走看看