Uva10054 The Necklace

Uva10054 欧拉回路

题意:给n个珠子,每个珠子的两端的颜色不同。问能否组成一条项链,两颗相邻的珠子相邻的两端颜色相同。

思路:把颜色看做点。珠子看做边。每一个珠子在两种颜色之间连边。无向图中任意一点的度数都为偶数,则该图具有欧拉回路。然后通过euler函数来输出即可。

/*
ID: onlyazh1
LANG: C++
TASK: The Necklace
*/
#include<iostream>
#include<cmath>
#include<stack>
#include<queue>
#include<cctype>
#include<vector>
#include<cstring>
#include<fstream>
#include<iomanip>
#include<algorithm>
using namespace std;
typedef unsigned long long ll;
int deg[70];
int G[70][70];

void euler(int u){
    for(int i=1;i<=50;i++)
        if(G[u][i]){
            G[u][i]--;G[i][u]--;
            euler(i);
            cout<<i<<" "<<u<<endl;
        }
}

int main(){
    //ifstream cin("in.txt");
    int T,n,u,v,icase=0;
    cin>>T;
    while(T--){
        memset(deg,0,sizeof(deg));
        memset(G,0,sizeof(G));
        cin>>n;
        while(n--){
            cin>>u>>v;
            G[u][v]++;G[v][u]++;
            deg[u]++;deg[v]++;
        }

        if(icase) cout<<endl;
        cout<<"Case #"<<++icase<<endl;
        bool flag=true;
        for(int i=1;i<=50;i++)
            if(deg[i]%2==1){
                cout<<"some beads may be lost"<<endl;
                flag=false;break;
            }
        if(flag)
            euler(u);
    }
    return 0;
}
View Code

 

转载于:https://www.cnblogs.com/onlyAzha/p/5203623.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值