HNUSTOJ-1675 Morse Code(DFS+字典序搜索)

1675: Morse Code

时间限制: 2 Sec  内存限制: 128 MB
提交: 73  解决: 33
[ 提交][ 状态][ 讨论版]

题目描述

 摩尔斯电码(英语:Morse Code)是一种时通时断的信号代码,通过不同的排列顺序来表达不同的英文字母、数字和标点符号。是由美国人萨缪尔·摩尔斯在1836年发明。

                                                                                                    --摘自维基百科
摩尔斯电码的代码有点(.),划(-)以及停顿组成。
常见的字符编码见下表:
 
现在我们有码文,可惜的是字符中间的停顿不见了,例如"-.-.", 可以被译码为"C", "KE","NN", "NTE", "TAE", "TEN", "TETE", 或 "TR". 

 

输入

 仅有一行,由点和划构成的字符串,字符串长度不超过25。

 

 

 

输出

 按字母序输出字符串所有可能的译码,每种情况占一行。

 

 

 

样例输入

--.-.

样例输出

GN
GTE
MAE
MEN
METE
MR
QE
TC
TKE
TNN
TNTE
TTAE
TTEN
TTETE
TTR
#include<iostream>
#include<cstring>
#include<cstdio>
#include<string>
#include<map>
#include<set>
using namespace std;
 
char dic[26][7]={
 ".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---",
 "-.-", ".-..", "--", "-.", "---", ".--.", "--.-", ".-.", "...", "-",
 "..-", "...-", ".--", "-..-", "-.--", "--.."
};
 
int len;
char a[25], b[25];
 
bool Strcmp(int cur, char *str){
    int len = strlen(dic[cur]);
    for(int i = 0; i < len; i++)
        if(*(str + i) != dic[cur][i]) return false;
    return true;
 
}
void DFS(int cur, int l){
    if(cur == len) {
        for(int i = 0; i < l; i++) printf("%c", a[i]);
        printf("\n"); return;
    }
    for(int i = 0; i < 26; i++){
        if(Strcmp(i, b + cur)){
            a[l] = 'A' + i;
            DFS(cur + strlen(dic[i]), l + 1);
        }
    }
}
int main(){
    scanf("%s", b);
    len = strlen(b);
    DFS( 0, 0);
}

 

转载于:https://www.cnblogs.com/Pretty9/p/7406686.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值