码迷,mamicode.com
首页 > 其他好文 > 详细

图论之各种找环

时间:2015-09-17 19:46:23      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

给我们一个有向图,找出长度为3的环,如果有的话,输出环上的三个点,如果没有,输出-1

因为只有三个点,所以可以暴力, 枚举两条边,判断第三条是不是存在即可。  fa -> u, u -> i,    判断g[i][fa]==1?

 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <string.h>
 5 #include <math.h>
 6 #include <vector>
 7 #include <string>
 8 #include <vector>
 9 #include <set>
10 #include <map>
11 #include <queue>
12 #include <stack>
13 #include <algorithm>
14 #include <functional>
15 using namespace std;
16 
17 const int N = 5000 + 10;
18 char g[N][N];
19 bool vis[N];
20 int n;
21 int a,b,c;
22 void dfs(int u, int fa)
23 {
24     vis[u] = true;
25     for(int i=1; i<=n&&(!a||!b||!c);++i)
26     {
27         if(g[u][i]==0) continue;
28         if(fa!=-1 && g[i][fa]==1)
29         {
30             a = fa;
31             b = u;
32             c = i;
33         }
34         if(!vis[i])
35             dfs(i,u);
36     }
37 }
38 int main()
39 {
40 
41     while(scanf("%d",&n)!=EOF)
42     {
43         for(int i=1;i<=n;++i)
44         {
45             scanf("%s",g[i]+1);
46             for(int j=1;j<=n;++j)
47                 g[i][j] -= 0;
48 
49         }
50         memset(vis,0,sizeof(vis));
51         a = b = c = 0;
52         for(int i=1;i<=n;++i)
53             if(!vis[i])
54                 dfs(i,-1);
55         if(!a)
56             printf("%d\n",-1);
57         else
58             printf("%d %d %d\n",a,b,c);
59 
60     }
61     return 0;
62 }

 

图论之各种找环

标签:

原文地址:http://www.cnblogs.com/justPassBy/p/4817119.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!