zoukankan      html  css  js  c++  java
  • [题解]UVA10054 The Necklace

    链接:http://vjudge.net/problem/viewProblem.action?id=18806

    描述:给出一堆珠子,每个珠子有两种颜色,有一端颜色相同的珠子可以串在一起,问是否可以把所有珠子串在一起,并求其中一种方案。

    思路:欧拉回路

            以颜色作为节点,以珠子作为边建图,无向图。

    下面是我的实现:

     1 #include <iostream>
     2 #include <cstdio>
     3 #include <cstring>
     4 using namespace std;
     5 #define MaxC 55
     6 int Edge[MaxC][MaxC],Du[MaxC];
     7 int M,Cnt;
     8 bool vis[MaxC][MaxC];
     9 inline void Addedge(int u,int v)
    10 {
    11     Edge[u][v]++;Edge[v][u]++;
    12 }
    13 void Solve(int u)
    14 {
    15     int v;
    16     for(v=1;v<=M;)
    17     {
    18         if(Edge[u][v])
    19         {
    20            // vis[u][v]=vis[v][u]=1;
    21             Edge[u][v]--;Edge[v][u]--;
    22             Solve(v);
    23             printf("%d %d",v,u);
    24             if(u!=M)
    25                 printf("
    ");
    26             if(u==M)
    27             {
    28                 Cnt--;
    29                 if(Cnt)
    30                     printf("
    ");
    31             }
    32         }
    33         else v++;
    34     }
    35 }
    36 int main()
    37 {
    38     int T,N;
    39     int i,j,u,v;
    40     scanf("%d",&T);
    41     for(i=1;i<=T;i++)
    42     {
    43         if(i>1) printf("
    ");
    44         printf("Case #%d
    ",i);
    45         scanf("%d",&N);
    46         memset(Du,0,sizeof(Du));
    47         memset(Edge,0,sizeof(Edge));
    48         memset(vis,0,sizeof(vis));
    49         M=0;
    50         for(j=1;j<=N;j++)
    51         {
    52             scanf("%d%d",&u,&v);
    53             Addedge(u,v);
    54             Du[u]++;Du[v]++;
    55             if(M<u) M=u;
    56             if(M<v) M=v;
    57         }
    58         for(j=1;j<=M;j++)
    59             if(Du[j]%2)
    60                 break;
    61         if(j<=M)
    62         {
    63             printf("some beads may be lost
    ");
    64             continue;
    65         }
    66         Cnt=Du[M];
    67         Solve(M);
    68     }
    69     return 0;
    70 }
    View Code

    给一个我写的数据生成器:http://www.cnblogs.com/CQBZOIer-zyy/p/3818078.html

  • 相关阅读:
    fiddler的使用
    redis pipeline
    redis hash map
    redis队列的实现
    PHP-redis中文文档-命令
    websocket
    c++之socket,阻塞模式
    Django上传文件和修改date格式
    通过字符串导入模块
    'CSRFCheck' object has no attribute 'process_request' 报错
  • 原文地址:https://www.cnblogs.com/CQBZOIer-zyy/p/3818069.html
Copyright © 2011-2022 走看看