zoukankan      html  css  js  c++  java
  • UVA10054 The Necklace(欧拉回路)

    题目链接

    题意:

    每个珠子两半有两种不同的颜色组成,相邻两珠子在接触的地方颜色相同,确认一些零碎的珠子,能否还原成完整的项链。

    分析:

    把每种颜色看成一个结点,珠子的两半连一条有向边,则题目转化为了欧拉回路问题。

    注意:

    注意编号问题,因为颜色1~50,所以最多有50个结点。

     对欧拉回路输出有疑问的可参考本随笔

    #include <iostream>
    #include <cstdio>
    #include <cstdlib>
    #include <cstring>
    #include <queue>
    #include <stack>
    
    using namespace std;
    
    const int maxn = 50+20;
    const int n = 50;
    
    int deg[maxn], G[maxn][maxn], m;
    
    void euler(int u){
        for(int v=1; v<=n; v++){    //这里是n而非m
            if(G[u][v]){
                G[u][v]--;
                G[v][u]--;
                euler(v);
                printf("%d %d\n", v, u);
            }
        }
    }
    
    int main(){
        int T, u, v, kase=0;
        cin >> T;
        while(T--){
            cin >> m;
    
            memset(deg, 0, sizeof(deg));
            memset(G, 0, sizeof(G));
    
            for(int i=0; i<m; i++){
                cin >> u >> v;
                G[u][v]++;
                G[v][u]++;
                deg[u]++;
                deg[v]++;
            }
    
            bool flag = true;
    
            for(int i=1; i<=n; i++){    //这里也是n非m
                 if(deg[i] % 2 == 1) { flag = false; break; }
            }
    
            if(kase) putchar('\n');
    
            if(flag){
                printf("Case #%d\n", ++kase);
                euler(u);
            }
            else printf("Case #%d\nsome beads may be lost\n", ++kase);
        }
    
        return 0;
    }
  • 相关阅读:
    51 数据中重复的数字
    64 数据流中的中位数
    79. Word Search
    93. Restore IP Addresses
    547. Friend Circles
    Epplus Excel 导入 MSSQL 数据库
    用来更新服务的bat 脚本
    ASP.Net MVC 引用动态 js 脚本
    8、结构的构造器应该显式调用!!!(坑)
    Task 线程重用导致等待!
  • 原文地址:https://www.cnblogs.com/tanhehe/p/3097590.html
Copyright © 2011-2022 走看看