洛谷 P1341 无序字母对(搜索_图的遍历)

5人阅读 评论(0) 收藏 举报
分类:

传送门


欧拉回路嘛…也叫一笔画,当度为奇数的点有0个或2个时有解,其他情况就“No Solution”。
由于要字典序最小的方案,我们从最小的字母开始遍历,然后记录答案即可。

Code:

#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
using namespace std;

int n,len=0;
bool a[60][60];
int d[60];
char ans[2010];

inline int num(char x)
{
    if(x>='A' && x<='Z') return x-'A'+1;
    else return x-'a'+27;
}

inline char word(int x)
{
    if(x>=1 && x<=26) return x-1+'A';
    else return x-27+'a';
}

void dfs(int x)
{
    for(int y=1;y<=52;y++)
    {
        if(a[x][y])
        {
            a[x][y]=a[y][x]=0;
            dfs(y);
        }
    }
    ans[len--]=word(x);
}

int main()
{
    scanf("%d",&n); len=n;
    for(int i=1;i<=n;i++)
    {
        char s[10];scanf("%s",s);
        int x=num(s[0]),y=num(s[1]);
        d[x]++;d[y]++;
        a[x][y]=a[y][x]=true;
    }
    int p,tot=0;
    for(int i=1;i<=52;i++)
        if(d[i]&1)
        {
            p=min(p,i);
            tot++;
        }
    if(tot!=0 && tot!=2)
    {
        printf("No Solution");
        return 0;
    }
    if(!tot)
        for(int i=1;i<=52;i++)
            if(d[i])
            {
                p=i;
                break;
            }
    dfs(p);
    printf("%s",ans);
}
查看评论

洛谷 P1341无序字母对

题目来源:https://www.luogu.org/problem/show?pid=1341 审题之后,我们可以看出题目即是让找出一条路径,经过每条路一次且仅一次,即找一条欧拉路径,并保...
  • moon_sky1999
  • moon_sky1999
  • 2016-10-20 20:08:03
  • 246

洛谷 P1341 无序字母对(欧拉路)

P1341 无序字母对 题目提供者yeszy 标签 福建省历届夏令营 难度 提高+/省选- 最新讨论 题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠...
  • sinat_34550050
  • sinat_34550050
  • 2016-11-08 21:27:09
  • 249

洛谷 [P1341]无序字母对

这道题第一眼以为是一道字符串的题,但细想一下是一道求欧拉路的图论题。 把每一对对应关系看成一条边,本题即求这张图上是否存在一个欧拉回路或欧拉路,并要求字典序最小的方案,那么我们在dfs的时候就要从该...
  • qq_40280028
  • qq_40280028
  • 2017-11-02 11:14:57
  • 58

洛谷 P1341 无序字母对

题目描述给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。输入输出格式输入格式:第一行输入一个正整数...
  • sdz20172133
  • sdz20172133
  • 2018-04-21 00:26:39
  • 7

洛谷1341 无序字母对 解题报告

【问题描述】        给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。         【输...
  • cqyz_holiday
  • cqyz_holiday
  • 2016-07-10 13:54:00
  • 710

洛谷 P1341 无序字母对

欧拉(回)路
  • Rlt1296
  • Rlt1296
  • 2016-07-12 22:16:10
  • 306

洛谷1341 无序字母对(欧拉路)

【问题描述】   给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。【输入格式】   第一行输入...
  • wx_t91
  • wx_t91
  • 2016-10-09 20:15:47
  • 159

洛谷P1341

洛谷1341 无序字母对本题地址:http://www.luogu.org/problem/show?pid=1341题目描述给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置...
  • QWsin
  • QWsin
  • 2016-06-16 20:49:00
  • 481

P1341 无序字母对

图论
  • chai_jing
  • chai_jing
  • 2016-07-14 12:37:47
  • 213

[洛谷1341]无序字母对---欧拉回路/通路

题目描述 给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。 输入输出格式 输入格式: 第一...
  • qq_27121257
  • qq_27121257
  • 2017-08-30 14:52:03
  • 113
    个人资料
    持之以恒
    等级:
    访问量: 744
    积分: 404
    排名: 20万+
    文章存档
    最新评论