• 求无向图的简单最大环


    以poj3895为例:

     思想很简单,就是有dfs遍历图并且用一个数组记录所走的长度。当来到一个点是已经访问过的,则肯定形成一个环,更新环的长度,直到所有点访问完为止。

    代码:

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 #define _Clr(x, y) memset(x, y, sizeof(x))
     5 #define INF 0x3f3f3f3f
     6 #define N 5000
     7 using namespace std;
     8 
     9 int head[N], tot;
    10 struct Edge
    11 {
    12     int to, next;
    13     Edge(){}
    14     Edge(int a, int b):to(b), next(head[a]){}
    15 }edge[N<<1];
    16 int n, ans;
    17 
    18 void Init()
    19 {
    20     tot = 0;
    21     _Clr(head, -1);
    22 }
    23 
    24 void Add_edge(int a, int b)
    25 {
    26     edge[tot] = Edge(a, b);
    27     head[a] = tot++;
    28 }
    29 bool used[N];
    30 int dist[N];
    31 void dfs(int u, int len)
    32 {
    33     used[u] = 1;
    34     dist[u] = len;
    35     for(int i=head[u]; i!=-1; i=edge[i].next)
    36     {
    37         int v = edge[i].to;
    38         if(used[v])
    39             ans = max(ans, dist[v]-dist[u]+1);
    40         else
    41             dfs(v, len+1);
    42     }
    43 }
    44 
    45 int main()
    46 {
    47     freopen("date.in","r", stdin);
    48     int T, m, a, b;
    49     scanf("%d", &T);
    50     while(T--)
    51     {
    52         scanf("%d%d", &n, &m);
    53         Init();
    54         while(m--)
    55         {
    56             scanf("%d%d", &a, &b);
    57             Add_edge(a, b);
    58             Add_edge(b, a);
    59         }
    60         ans = 0;
    61         _Clr(used, 0);
    62         _Clr(dist, 0);
    63         for(int i=1; i<=n; i++)
    64             if(!used[i]) dfs(i, 1);
    65         if(ans<=2)
    66             puts("0");
    67         else printf("%d
    ", ans);
    68     }
    69     return 0;
    70 }
    View Code
  • 相关阅读:
    apt-get install jdk
    progit-zh(Git中文文档)
    indexedDB bootstrap angularjs 前端 MVC Demo
    状态模式
    使用TypeConverter类
    wpf 全局异常捕获处理
    WPF 中的形状和基本绘图概述
    WPF设计自定义控件
    WPF快速入门系列(9)——WPF任务管理工具实现
    WPF快速入门系列(8)——MVVM快速入门
  • 原文地址:https://www.cnblogs.com/khan724/p/4441903.html
Copyright © 2020-2023  润新知