zoukankan      html  css  js  c++  java
  • 无向图中寻找桥

     1 /*==================================================*\
     2  |  无向图找桥
     3  | INIT: edge[][]邻接矩阵;vis[],pre[],anc[],bridge 置0;
     4  | CALL: dfs(0, -1, 1, n);
     5  \*==================================================*/
     6 int bridge, edge[V][V], anc[V], pre[V], vis[V];
     7 //vis[i]   0--尚未访问   1--正在访问   2--已经访问结束
     8 //anc[i]   该点能到达的最小序号
     9 //pre[i]   该点的序号
    10 void dfs(int cur, int father, int dep, int n) { // vertex: 0 ~ n-1
    11     if (bridge)//已经找到桥了
    12         return;
    13     vis[cur] = 1;//正在访问
    14     pre[cur] = anc[cur] = dep;
    15     for (int i = 0; i < n; ++i)
    16         if (edge[cur][i]) {//有一条边cur-->i
    17             if (i != father && 1 == vis[i]) {
    18                 if (pre[i] < anc[cur])
    19                     anc[cur] = pre[i]; //这是一条回边
    20             }
    21             if (0 == vis[i]) { //这是一条树边
    22                 dfs(i, cur, dep + 1, n);
    23                 if (bridge)
    24                     return;
    25                 if (anc[i] < anc[cur])
    26                     anc[cur] = anc[i];//更新该点能到达的最小值
    27                 if (anc[i] > pre[cur]) {
    28                     bridge = 1;
    29                     cout<<cur<<"  "<<i<<endl;
    30                     return;
    31                 }
    32             }
    33         }
    34     vis[cur] = 2;
    35 }

    如果想找到所有的桥,即把bridge的标记相关的代码去掉即可。

  • 相关阅读:
    显示AVI的第一桢
    视频采集,存成avi
    视频捕获
    如何将Wav文件做到EXE文件里
    图形整体拉出效果
    3.2 指数型生成函数
    3.1 普通型生成函数
    诡异的楼梯 HDU
    A strange lift HDU
    胜利大逃亡 HDU
  • 原文地址:https://www.cnblogs.com/kakamilan/p/2583903.html
Copyright © 2011-2022 走看看