现在的位置: 首页 > 综合 > 正文

求割边和割点

2014年09月05日 ⁄ 综合 ⁄ 共 393字 ⁄ 字号 评论关闭
int low[MAX],dep[MAX],mark[MAX],cutpoint[MAX];
 void dfs(int s,int father,int depth)
 {
    int u,v,tot=0;
    mark[s]=1;
    low[s]=dep[s]=depth;
    for(int i=0;i<mp[s].size();i++)
    {
       v=mp[s][i];
      if(mark[v]==1&&v!=father&&dep[v]<low[s])
    low[s]=dep[v];
     else if(mark[v]==0) 
     {
        tot++;
        dfs(v,s,depth+1)
       if(low[v]<low[s])
        low[s]=low[v];
        if((s==root&&tot>1)||(s!=root&&low[v]>=dep[s]))
        cutpoint[s]=1;
        if(low[v]>dep[s])
         //标记边(s,v)为割边 
     }
   }
   mark[s]=2;
}

抱歉!评论已关闭.