[POJ2337]

C++字符串的全排列 给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。 输入格式: 一行,一个字符串,长度不大于8。 输出格式: 输出所有全排列,每行一种排列形式,字典序从小到大。 输入样例: 在这里给出一组输入。例如: abc 输出样例: 在这里给出相应的输出。例如: abc acb bac bca cab cba 这道题可以使用C++所给的函数STL里的全排函数——next_permuta... 阅读详情

Catenyms
http://poj.org/problem?id=2337

题目大意:

单词首尾相接,问是否可以把所有单词串成一串,如果可以打印出来。

判断是否可以完成其实很简单,普通的有向图判是否存在欧拉路径(degree!=0的点没有,或者之后两个且一个1一个-1)

这一次要打印字典序最小的欧拉路径。

很容易想到先把所有单词读到本地,做一次排序,再将所有单词接到结点a..z上。先特殊判断是否存在欧拉路径(基图连通性判断,degree判断)。

之后用一次深搜打印欧拉路径。

WA了很多次,有两个要注意点,在dfs函数里头:

1、从一个点出发,是可以找到很多环的,多以dfs一次以后不要return,继续找下一个环

2、将所有单词接到结点上要注意是字典序顺序还是逆序的(我习惯加边的方法加进去以后单词变成字典序逆序了),可能要用一个栈来暂存答案,而不能直接输出。


源代码:

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <limits.h>
#include <algorithm>
using namespace std;
#define maxn 26

struct edge{
    int v, next, id;
    bool vst;
}e[1010];

struct word{
    char str[30];
}word[1010];

int n, cnt;
int g[maxn], stack[1010];

bool cmp(struct word a, struct word b)
{
    return strcmp(a.str, b.str)>0;
}

void MakeSet(int f[], int a)
{
    f[a]=a;
}
int Find(int f[],int a)
{
    if(f[a]==a) return a;
    return f[a]=Find(f,f[a]);
}
bool Same(int f[],int a,int b)
{
    return Find(f,a)==Find(f,b);
}
void Union(int f[],int a,int b)
{
    f[Find(f,a)]=Find(f,b);
}
    
int init()
{
    int odd, t1, t2;
    int f[26], deg[26];
    bool show[26];
    
    scanf("%d", &n);   
    for (int i=0; i<n; i++)
        scanf("%s", word[i].str); 
    sort(word, word+n, cmp);
    
    memset(g, 255, sizeof(g));          //边 
    memset(deg, 0, sizeof(deg));        //度数 
    memset(show, 0, sizeof(show));
    
    for (int i=0; i<26; i++)
        MakeSet(f, i);
    
    for (int i=0, j=0; i<n; i++)
    {
        t1=word[i].str[0]-'a';
        t2=word[i].str[strlen(word[i].str)-1]-'a';
        deg[t1]--;
        deg[t2]++;
        show[t1]=show[t2]=true;
        Union(f, t1, t2);
        e[j].v=t2; e[j].id=i; e[j].vst=false; e[j].next=g[t1]; g[t1]=j++;
    }
    
    for (int i=0; i<26; i++)                //判连基图的连通性 
        if (show[i])
        {
            for (int j=i+1; j<26; j++)
                if (show[j] && !Same(f, i, j)) 
                    return -1;
            break;
        }
        
    odd=0;
    for (int i=0; i<26; i++)
        if (show[i] && deg[i]!=0)
        {
            if (deg[i]!=1 && deg[i]!=-1) return -1;
            if (odd==0) t1=i;
            else if (odd==1) t2=i;
            odd++;
            if (odd>2) return -1;
        }
        
    if (odd==1) return -1;
    else if (odd==2)                        //不存在欧拉回路,只存在欧拉路径 
    {
        if (deg[t1]+deg[t2]!=0)
            return -1;
        if (deg[t1]==-1)
            return t1;
        else
            return t2;
    }
    
    for (int i=0; i<26; i++)                //存在欧拉回路,字典序最小的点开始 
        if (show[i]) return i;
    
    return -1;
}

void dfs(int k, int eid)
{
    for (int i=g[k]; i!=-1; i=e[i].next)
        if (e[i].vst==false)
        {
            e[i].vst=true;
            dfs(e[i].v, i);
        }
    if (eid!=-1)
        stack[cnt++]=e[eid].id;
}

int main()
{
    int cs, t;
    scanf("%d", &cs);
    while (cs--)
    {
        t=init();
        if (t==-1)
        {
            printf("***\n");
            continue;
        }
        else
        {
            cnt=0;
            dfs(t, -1);
            printf("%s", word[stack[cnt-1]].str);
            for (int i=cnt-2; i>=0; i--)
               printf(".%s", word[stack[i]].str); 
            printf("\n");
        }
    }
    return 0;
}


自组织映射神经网络(SOM) 目录 1 背景:自组织(竞争型)神经网络 2竞争学习的概念与原理 2.1 竞争学习的步骤 2.2 示例 3SOM典型结构 4SOM网的权值调整域 5 SOM Kohonen 学习算法 6 SOM示例 7SOM设计细节 7.1输出层设计 7.2输出层节点排列的设计 7.3 权值初始化问题 7.4学习率的设计 7.5设计拓扑领域 8SOM功能分析 8.1 保序映射 8.2数据压缩 8.3 特征提取 9自组织映射神经网络与K均值算法的区别... 阅读详情

相关推荐

马尔可夫网络和贝叶斯网络的一些总结

马尔可夫网络和贝叶斯网络的一些总结 最近学习了一些关于概率逻辑的知识图谱推理方法,主要就是贝叶斯网络和马尔可夫网络,在此总结一下,内容都来自网络资料,这里加入了一下个人的理解,尽量为大家避雷! 这篇文章是我目前在网络上找到的关于贝叶斯网络最清晰的介绍,大家有兴趣可以去看看 贝叶斯网络中比较重要的两部分就是贝叶斯网络的结构和条件概率表。 贝叶斯网络的结构 下面通过一个例子来介绍: 贝叶斯网的网络结...

qq_43654303的博客 4372

字符串的全排列

7-13 字符串的全排列 (20 分) 给定一个全由小写字母构成的字符串,求它的全排列,按照字典序从小到大输出。 输入格式: 一行,一个字符串,长度不大于8。 输出格式: 输出所有全排列,每行一种排列形式,字典序从小到大。 输入样例: 在这里给出一组输入。例如: abc 输出样例: 在这里给出相应的输出。例如: abc acb bac bca cab cba #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc++.h.

bairimeng16的博客 1073

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当数据不满足正态分布假设时,该非参数检验是传统双因素方差分析的有效替代方案。文章从原理、R环境配置、数据准备、代码实现、结果解读到事后比较与可视化,提供了完整的实战指南,帮助研究者稳健地分析多因素实验设计中的主效应和交互效应。

cc789的博客 406

大小写全排列

大小写全排列 查看 提交 统计 提问 总时间限制: 10000ms 内存限制: 65536kB 描述 给定一个包含大小写字母与数字的字符串s,通过改变s中的每个字母的大小写,我们可以得到一个新的字符串。 请写一个程序输出所有可能得到的字符串的集合。 输入 一个字符串s。 输出 假设总共可以得到n个不同的字符串,则输出n行,每行包含一种可能的字符串。 输出字符串的顺序请按照字典序进行排序。 样例输入 a1b2 样例输出 A1B2 A1b2 a1B2 a1b2 ..

Knight_Ren的博客 401

硅谷刷屏的ClawdBot,让Mac mini卖爆了!创始人爆料:一人开发、100% AI 写代码

这两天,个人 AI 助手 ClawdBot 席卷硅谷,国内外社交平台上全是关于它的讨论。 在试用后,网友们纷纷给出了很高的评价。“它是迄今为止最伟大的 AI 应用,相当于你 24 小时全天候专属 AI 员工。”Creator Buddy 创始人兼 CEO Alex Finn 盛赞道,“这就是他们 (Anthropic) 希望 Claude Cowork 呈现的样子。”

技术引领业务创新 1584

最新 抖音 X-Gorgon 0408 和8408 设备注册协议

抖音app先是检测了你的手机cpu架构,是x86还是armeabi,通过cpu架构的不同来调用so内不同的xg方法,所以导致现在最新版抖音app的xg算法有0408和8408两种。两种都是最新版,因为我发现当我使用oppo手机安装最新版抖音抓包的xg是8408,而当我用小米或者华为安装最新版抖音,抓包以后发现xg是0408。抖音IOS XG84 设备注册激活协议代码片段。...

Q44804487的博客 1万+

9068 字母组合

给定 N 个小写字母,然后将 N 个小写字母按照字典排序后组合成一个字符串并输出。例如 N=4,4 个小写字母分别为 c,d,a,c,按照字典排序后组合成的字符串为:accd。第一行输入一个正整数 N(2

huangyuna7的博客 375

论文理解【LLM-OR】——【Step-Opt】Training LLMs for Optimization Modeling via Iterative Data Synthesis and

本文提出 Step-Opt-Instruct 方法,针对用 LLM 做 OR 问题求解任务,用迭代问题生成 + 分步验证机制实习更可靠的训练数据合成,从而微调开源 LLM 得到 Step-Opt。在多个 OR 建模基准提升性能,尤其在复杂问题上提升更明显

佚失的诗篇 803

算法小题(一):按字典排序的子字符串

用友2018秋招算法小题 原题目: /**  * 找出连续数字字串的[开始元素,连续个数]  * 样例:  * input:    8 3 4 5 6 9 12 16【一行输入,按空格分隔】  * output:  [3,4]  */ 注意:遍历下一个元素时,数组越界问题 public class Main { public static void main(String[] args...

J.R.Leonardo的博客 470

10万+字超硬核 机器学习 笔记(面试八股)

10w字总结面试中可能用到的机器学习八股和常用算法,包括感知机(Perceptron)、多层感知机(MLP, Multi-Layer Perceptron)、支持向量机(SVM, Support Vector Machine)、K 最近邻(KNN, K-Nearest Neighbors)、朴素贝叶斯(Naive Bayes)、决策树(Decision Tree)、随机森林(Random Forest)、Bagging、Boosting、GBDT、XGBoos、LightGBM等。

haopinglianlian的博客 4656

部分旧版统信国产系统下载资源

注:全部自来网络查找,建议到官网下载最新版。

aggs1990的专栏 5226

POJ 2337 Catenyms

题目链接 : POJ2337 Catenyms Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8095   Accepted: 2130 Description A catenym is a pair of words separated by a period

Salvare219 668

AUTOSAR汽车电子嵌入式编程精讲300篇-基于加密算法的车载CAN总线安全通信

随着科学技术的不断更新和社会文明的不断进步,汽车已经走入寻常百姓家, 成为当代社会必不可少的交通工具。伴随着互联网技术的飞速发展,汽车也不再 是一个简单的交通工具,已经逐渐发展成为一个集出行、通信、娱乐等功能于一 身的综合智能体,进而推动了车联网产业的蓬勃发展。车联网是在传统汽车的框架上安装了传感器、执行器、控制器等分布式和集 中式控制器,使汽车具备环境感知、协同控制、优化执行等功能,并通过网络技 术实现与车外环境的信息共享,给驾驶带来方便的同时也终将成为可以替代人操 作的新一代汽车[1-3]。

getusushu的博客 2590

POJ 2337

POJ 2337 题目大意:多组测试数据;给出n个字符串给你, 问是否能找到一种排列方式使前一个单词的词尾与后面的单词的词头一样? 解:一开始我想错了, 把单词看成点构图bfs, 结果tle(目前构点的方式都是失败的, bfs会tle, 如果是用一些性质的话还没有yy出来)。目前的写法是用单词构边, 以26个小写英文字母为节点,问是否有一种走法使所有边都走过。这样就转化为欧拉路的问题了。然后判...

weixin_30556161的博客 177

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

poj 2337 Catenyms

poj.org/problem?id=2337 这是一个有向图的欧拉路径问题 不忍吐槽 搞了好久。 #include #include #include #include #include using namespace std; const int N = 30; struct node{ int v; bool vis; string word;

思维迷宫 488

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

poj 2337 Catenyms (边最小字典序欧拉路径 Fleury)

题目链接:   poj 2337 题目大意:   给出N个单词,单词A的开头与另外单词B结尾相同                   则单词A和单词B可以连起来,问是否可以把所有单词都串成一条线                   输出最小字典序的(按单词的字典序串) 解题思路:  对于每个单词,把单词的起点和终点字母当作顶点                   这个单词即是起

ンZee的解题报告 1400

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

poj 2337 Catenyms 欧拉路径

poj 2337 题意:给你一些单词,单词a的结尾若等于单词b的开头,就可以连接ab,要求把所有单词连接起来,如果情况有多种,要求字典序最小,如果不能连接所有单词,输出***。 思路:这个题看起来是求哈密顿路,实则求欧拉路,把每个单词的开头和结尾当做一条边连接起来,那么在这个有向图中,存在欧拉路则有解,不过需要注意的是,需要并查集判断图是否联通,不连通无解,以及根据欧拉路的性质:要么所有出度等...

ccsu_cat 247

POJ 2337 Catenyms (欧拉回路+并查集)

题目地址:POJ 2337 这题跟POJ 1386差不多,只不过这题多一个输出路径而已。 按字母来建边,每个单词的首字母和尾字母加边。先判断是否连通,然后判断每个字母的入度和出度不能出现差的绝对值大于2,然后入度和出度差的绝对值为1的不能超过两个。就可以形成欧拉路径 代码如下: #include #include #include #include #include #inc

scf0920 927

POJ2337 Catenyms 欧拉路径的输出

题目链接: poj2337 题意: 给出一些字符串,问能否将这些字符串  按照 词语接龙,首尾相接  的规则 使得每个字符串出现一次 如果可以 按字典序输出这个字符串序列 解题思路: 1.将每个字符串的首尾单词理解为图中的点,将字符串理解为边构图 2根据入度出度判断是否能构成欧拉路径 3并查集判断连通性 4将所有字符串按字典序排

旧时光 1677

poj2337(gcc)

#include #include #include #define maxn 1001#define num 26typedef struct node{int next, adj;char word[21];}node;node adjlist[maxn];int adj[num];int deg[num];int vis[maxn];int top, stack[maxn];int tree

698

poj 2337(欧拉回路的最小子字典序)

C++语言: poj 2337 并查集+欧拉通路+贪心思维+dfs #include #include #include #include #include #include #include using namespace std; #define mset(x) (memset(x,0,sizeof(x))) #define MAXN 26 struct node { i

Weiguang_123的专栏 3468

Comsol土柱冻胀融沉仿真:热-水-力三场耦合建模与关键参数

冻胀融沉是寒区工程中因温度变化引发的土体变形现象,本质上是热-水-力三场耦合作用的结果。冰水相变潜热、未冻水含量随负温变化以及冰透镜体形成,使得单纯的热传导或达西渗流无法准确描述。数值仿真的价值在于,通过调节温度梯度与水分补给条件,可重现冻结锋面推进、水分重分布及残余变形等关键行为。本文以室内土柱试验为对象,基于Comsol建立热-水-力耦合模型,涵盖相变潜热的光滑处理、依赖含冰量的渗透系数定义、冻胀应变的自定义设置等要点,并结合边界条件与求解器配置,讨论如何将仿真结果与实测对标。该思路可推广至多年冻土路基

weixin_34216196的博客 378

poj2337 Catenyms【欧拉图】

题目链接:http://poj.org/problem?id=2337 题意:问你所有的字符串能否首尾相连在一起,如果能,输出字典序最小的那一串东西,否则输出* 解析:对于输入所有字符串先排个序,然后逆序建图,这样就搜的时候就是优先选择字典序小的字符串,然后就是判是否符合题意,搜的时候记录一下结果#include <iostream> #include <algorithm> #include

22h's Blog 332

分布式系统一致性模型选型:从强一致到最终一致的实践指南

在分布式系统设计中,一致性模型是决定数据正确性与系统可用性的核心权衡点。从CAP理论出发,强一致与最终一致并非简单的二选一,而是覆盖线性一致性、因果一致性、读己之写等多种语义的光谱。理解各模型在协调开销、故障恢复和并发冲突下的行为差异,是架构选型的基础。实际业务中,账户余额、库存扣减等场景必须依赖强一致,而内容展示、聚合报表则可接受最终一致。关键在于通过多副本竞争测试、收敛时间量化、脑裂恢复演练等手段验证系统真实行为,并辅以幂等设计、本地消息表等工程实践。本文结合线上事故复盘,给出从需求反推选型的方法与排查

weixin_34293911的博客 399

poj 2337 Catenyms 【欧拉路径】

题目链接:http://poj.org/problem?id=2337 题意:给定一些单词,假设一个单词的尾字母与还有一个的首字母同样则能够连接。问能否够每一个单词用一次,将全部单词连接,能够则输出字典序最小的序列。 代码: (bin 神的板子) #include &lt;stdio.h&gt; #include &lt;ctime&gt; #include &lt...

weixin_34413103的博客 74

POJ 2337 - Catenyms(欧拉回路)

题目: http://poj.org/problem?id=2337 题意: 将所有的单词首尾相连链接起来,且每个单词只可使用一次,问是否存在方案,若存在,输出字典序最小的方案。 思路: 使用全部单词且每个单词仅使用一次,可以联系到有向图欧拉路径。 每个单词对应一条有向边,u为单词首字母对应的数字,v为单词尾字母对应的数字,建一条u指向v的边。 判断有向图是否存在欧拉路径: 1)并

Halo 508
上一篇: [hdu3477] Temperature [3472] HS BDC
下一篇: 关于解决VS2008ODBC连接MySQL时“绑定所有列“程序崩溃问题
program_shun
博客等级 码龄17年 10粉丝 43原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值