题目相关

题目链接

计蒜客 OJ,https://nanti.jisuanke.com/t/T1244。

我的 OJ,http://47.110.135.197/problem.php?id=4766。

题目描述

蒜头君给出两个单词(开始单词和结束单词)以及一个词典。找出从开始单词转换到结束单词,所需要的最短转换序列。转换的规则如下:

1、每次只能改变一个字母

2、转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中

例如:开始单词为:hit,结束单词为:cog,词典为:[hot,dot,dog,lot,log,mot],那么一种可能的最短变换是: hit -> hot -> dot -> dog -> cog,所以返回的结果是序列的长度 5。

注意:

1、如果不能找到这种变换,则输出 0;

2、词典中所有单词长度一样;

3、所有的单词都由小写字母构成;

4、开始单词和结束单词可以不在词典中。

输入格式

共两行,第一行为开始单词和结束单词(两个单词不同),以空格分开。第二行为若干的单词(各不相同),以空格分隔开来,表示词典。单词长度不超过 5,单词个数不超过 30。

输出格式

输出转换序列的长度。

样例输入

hit cog
hot dot dog lot log

样例输出

5

题目分析

题意分析

从开始单词转换到结束单词,每次只能改变一个字母,转换过程中出现的单词(除开始单词和结束单词)必须存在于词典中。求输出转换序列的长度。

样例数据分析

样例输入 hit,词典为 [hot,dot,dog,lot,log,mot]。按照规定每次只能改变一个字母,转换的单词必须在词典表中。因此我们可以画出下图的变换过程:

从上图可以看出,hit 变化到 log 有两种路径:

1、hit -> hot -> dot -> dog -> cog,本方法序列长度为 5。

2、hit -> hot -> lot -> log -> cog,本方法序列长度为 5。

所以最终输出的结果为 5。

技术细节

如何判断从 hit 变成 hot 是变化了一个字母?

由于本题单词长度不超过 5,因此可以使用暴力比较方法对两个字符串进行比较。相关代码如下:

//比较字符串a和b是否差一个字符
bool judge(const string &a, const string &b) {int len = max(a.length(), b.length());int ans = 0;for (int i=0; i<len; i++) {if (a[i]!=b[i]) {ans++;if (ans>1) {return false;}}}return 1==ans?true:false;
}

如何判断某个字符串已经访问过?

通过设置标志为来实现。

数据结构定义

个人还是趋向定义一个结构体,将所有数据包括在里面。

typedef struct _NODE {string data;//字符串int dis;//距离bool vis;//访问性
} NODE;

编程思路

从上面的样例数据分析,本题是一道 BFS 模板题。大致可以分以下几个步骤:

1、读入数据。

2、将开始数据加入到队列中。

3、使用 BFS 遍历。

AC 参考代码

#include <bits/stdc++.h>using namespace std;typedef struct _NODE {string data;//字符串int dis;//距离bool vis;//访问性
} NODE;const int MAXN = 30+4;
NODE a[MAXN];//判断两个字符串是否差一个字符
bool judge(const string &a, const string &b) {int len = max(a.length(), b.length());int ans = 0;for (int i=0; i<len; i++) {if (a[i]!=b[i]) {ans++;if (ans>1) {return false;}}}return (1==ans)?true:false;
}int main() {NODE st = {};//开始单词NODE ed = {};//结束单词cin >> st.data >> ed.data;int cnt = 0;while (cin>>a[cnt++].data);queue<NODE> q;//队列st.vis = true;st.dis = 1;q.push(st);while (false == q.empty()) {//取出队首元素NODE cur = q.front();q.pop();//判断能否变成结束单词if (true==judge(cur.data, ed.data)) {cout << cur.dis+1 << endl;return 0;}//检查词典表那个单词可以插入for (int i=0; i<cnt; i++) {if (false==a[i].vis && true==judge(cur.data, a[i].data)) {a[i].vis = true;a[i].dis = cur.dis+1;q.push(a[i]);}}}printf("0\n");return 0;
}

计蒜客题解——T1244:单词序列相关推荐

  1. 计蒜客题解——T1769:最大岛屿

    题目相关 题目链接 计蒜客,https://nanti.jisuanke.com/t/T1405. 我的OJ,http://47.110.135.197/problem.php?id=5254. 题目 ...

  2. 计蒜客题解——T1414:抠图

    题目相关 题目链接 计蒜客,https://nanti.jisuanke.com/t/T1414. 我的 OJ,http://47.110.135.197/problem.php?id=4768. 题 ...

  3. 计蒜客题解——T1214:鸣人和佐助

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1214. 题目描述 已知一张地图(以二维矩阵的形式表示)以及佐助和鸣人的位置.地图上的每个位置都可以走到 ...

  4. 计蒜客题解——T1213:拯救行动

    题目相关 题目链接 计蒜客 OJ,https://nanti.jisuanke.com/t/T1213. 题目描述 公主被恶人抓走,被关押在牢房的某个地方.牢房用 N×M(N,M≤200) 的矩阵来表 ...

  5. 计蒜客题解——最大的余数

    其实本题的难度真心不高,但是可以完整说明数据分析.标程.随机数生成.对拍等部分. 题目链接 原题来自计蒜客的某次比赛.计蒜客对应的链接为https://nanti.jisuanke.com/t/422 ...

  6. 计蒜客题解——T1157:派

    题目相关 题目链接 计蒜客,https://nanti.jisuanke.com/t/T1157. 我的OJ,http://47.110.135.197/problem.php?id=4951. 题目 ...

  7. 计蒜客题解-T1260宗教信仰

    题目概况 链接: https://nanti.jisuanke.com/t/T1260 难度: 普及/提高-(计蒜客评级普及T3,个人评价T2) 题目分析 简化题目: 有几群人,分别信仰不同的宗教,有 ...

  8. 计蒜客-最后一个单词的长度

    给定由大写,小写字母和空格组成的字符串,返回 最后 一个单词的长度. 如果输入中不存在单词,返回 0. 注意: "单词"是指不包含空格符号的字符串 例如: 对于字符串"h ...

  9. 计蒜客 最后一个单词的长度

    点击打开链接 1000ms 65536K 给定由大写,小写字母和空格组成的字符串,返回 最后 一个单词的长度. 如果输入中不存在单词,返回 00. 注意: "单词"是指不包含空格符 ...

最新文章

  1. netty4.0.x源码分析—bootstrap
  2. 锋利的jquery 知识点总结
  3. Java面试——线程池
  4. Bifrost微前端框架及其在美团闪购中的实践
  5. 如何使用 Mybatis 实现数据库 CURD 操作?
  6. UNITY关于阴影打开关闭的设置
  7. Struts向JSP中传值
  8. angularjs modal模态框----创建可拖动的指令
  9. 洛谷——P1914 小书童——凯撒密码
  10. python参考手册文字版_Python3.8标准库参考手册 中文完整pdf高清版
  11. android 开源 音乐播放器,Android 开源在线音乐播放器
  12. 介绍中国传统节日的网页html,中国传统节日大全表 中国16个传统节日介绍
  13. 查询计算机物理地址指令,怎么查询mac地址命令_如何查mac地址
  14. 好文推荐(十六)——Git使用详细教程
  15. 使用Python横向合并excel文件
  16. V2.0 版本的 《JavaGuide面试突击版》来啦!带着它的在线阅读版本来啦!
  17. php导出excel无边框线,phpexcel设置边框不全或者只有竖线问题解决方法
  18. 详解在ubuntu上使用Jigdo下载debian镜像
  19. Java自定义注解身份证校验
  20. linux系统cpu性能测试工具

热门文章

  1. java8 数值流 装箱和拆箱讲解
  2. 长文 | 2023届校招算法岗知识总结
  3. 阿里巴巴拓展印度市场又面临波折,其投资的移动支付企业衰落了
  4. 2020/08/28 周末计划
  5. 共享局域网与交换局域网
  6. 手动修改设置VMware的IP地址
  7. 当你敲完Hello World后的第一步——C
  8. [魔兽]Grubby兽族的操作编队详解
  9. 一个家庭幸不幸福,80%以上取决于女主人。有一种女人嫁给谁都幸福
  10. php获取之前五天的工作日