首页 > 其他 > 详细

[USACO]EulerianTour (欧拉通路)

时间:2014-04-07 17:20:52      阅读:528      评论:0      收藏:0      [点我收藏+]

题意:求序列最短的欧拉通路

解题思路:  无向图欧拉通路存在的条件是每个点的度都是偶数 或者是  有两个点度为奇数(一个为起点,一个为终点)   这里需要用到 fleury 算法(判圈法)时间复杂度为 O(V+E)

解题代码:

bubuko.com,布布扣
 1 /*
 2 ID: dream.y1
 3 PROG: fence
 4 LANG: C++
 5 */
 6 #include<stdio.h>
 7 #include<string.h>
 8 #include<stdlib.h>
 9 #include<time.h>
10 #include<math.h>
11 #include<limits.h>
12 int hs[2000];
13 int map[600][600];
14 int n;  
15    int be = 0; 
16    int en = 0;
17 int ans[1000];
18 int numans = 0 ; 
19 int okk = 0 ;
20 int is  = 0 ; 
21 void dfs(int k  )
22 {
23    if(!hs[k])
24    {
25       ans[numans] = k ; 
26       numans = numans +1;
27    }else {
28        while(hs[k])
29        {
30           for(int i = 1;i <= 500;i++)
31           {
32                if(map[k][i])
33                {
34                    map[k][i] -- ; 
35                    map[i][k] -- ; 
36                    hs[i] --; 
37                    hs[k] --;
38                    dfs(i);
39                }
40           }
41        }
42      ans[numans] = k ; 
43      numans ++ ; 
44    
45    }
46        
47 
48 }
49 int main(){
50 
51    freopen("fence.in","r",stdin);
52    freopen("fence.out","w",stdout);
53    memset(map,0,sizeof(map));
54    memset(hs,0,sizeof(hs));
55    scanf("%d",&n);
56    for(int i = 1;i  <= n;i ++)
57    {
58      int a, b; 
59      scanf("%d %d",&a,&b);
60      map[a][b] ++ ; 
61      map[b][a] ++ ; 
62      hs[a] ++ ; 
63      hs[b] ++ ; 
64    }
65    int ok = 0 ;
66    int bbe = INT_MAX ; 
67    for(int i = 1;i <= 500;i ++)
68    {
69       if(hs[i] % 2== 1)
70         {
71               is = 1; 
72             
73               be = i ; 
74               ok = 1;
75               break;
76         }
77       else if(hs[i])
78       {
79         bbe = bbe > i ? i:bbe; 
80       }
81    }
82    if(ok ) dfs(be);
83    if(!ok) 
84        dfs(bbe);
85    for(int i = numans -1 ;i  >= 0 ; i --)
86        printf("%d\n",ans[i]);
87 return 0 ;
88 }
View Code

 

[USACO]EulerianTour (欧拉通路),布布扣,bubuko.com

[USACO]EulerianTour (欧拉通路)

原文:http://www.cnblogs.com/zyue/p/3647065.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!