UVA 10054 The Necklace

完全就是哭瞎的节奏···QAQ

又是图论···

题意:有一种项链,每个珠子上有两种颜色,相同颜色的两颗珠子的两头相连,如果能连成环输出珠子的顺序,不能连成环输出"some beads may be lost"。


解法:DFS。将颜色看做点,珠子看做边,转化为欧拉回路问题。欧拉回路每个点的入度和出度和都是偶数。对颜色做DFS。加上回溯会T,不加度数判断会WA……

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string>
#include<string.h>
#include<math.h>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define ll long long
using namespace std;
int color[55][55];//记录不同颜色珠子的个数
int n;
struct node
{
    int a,b;
    node(int a,int b): a(a),b(b) {}
};//珠子
vector<node> v;//项链的序列
void dfs(int c)
{
    for(int i=1; i<55; i++)
    {
        if(color[c][i])
        {
            color[c][i]--;
            color[i][c]--;
            dfs(i);
            v.push_back(node(c,i));
        }
    }
    return ;
}
int main()
{
    int t;
    scanf("%d",&t);
    for(int cnt=1; cnt<=t; cnt++)
    {
        v.clear();
        int a,b;
        memset(color,0,sizeof(color));
        int d[55]= {0};//度数
        scanf("%d",&n);
        for(int i=0; i<n; i++)
        {
            scanf("%d%d",&a,&b);
            color[a][b]++;
            color[b][a]++;//一个珠子可以表示两种珠子
            d[a]++;
            d[b]++;
        }
        int flag=1;
        for(int i=0; i<55; i++)
        {
            if(d[i]&1)
            {
                flag=0;
                break;
            }
        }//度数判断
        printf("Case #%d\n",cnt);
        if(flag)
        {
            dfs(a);
            if(!(n==v.size()&&v[0].b==v[v.size()-1].a))//判断首尾是否可以相连
                flag=0;
        }
        if(flag)
            for(int i=v.size()-1; i>=0; i--)
                printf("%d %d\n",v[i].a,v[i].b);
        else
            puts("some beads may be lost");
        if(cnt<t)
            puts("");
    }
    return 0;
}


posted @   露儿大人  阅读(135)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· DeepSeek火爆全网,官网宕机?本地部署一个随便玩「LLM探索」
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 互联网不景气了那就玩玩嵌入式吧,用纯.NET开发并制作一个智能桌面机器人(三):用.NET IoT库
· 上周热点回顾(1.20-1.26)
点击右上角即可分享
微信分享提示