1124: 成语接龙

时间限制: 1 Sec 内存限制: 32 MB
提交: 19 解决: 6

题目描述

小明在玩成语接龙的游戏。成语接龙的规则是,如果成语A的最后一个汉字与成语B的第一个汉字相同,那么成语B就可以接到成语A的后面。
小明现在手上有一本成语词典,每次他都得花费一定时间来从当前的成语查到下一个可以接在后面的成语。
现在给你一个成语列表,请你计算从列表中的第一个成语开始,到接到列表中的最后一个成语最少需要多长时间。

输入

输入包含多组测试数据。
每组输入第一行是一个整数N(0 < N < 1000),表示成语列表的长度。
接下来N行,每行先输入一个整数T,再输入一个字符串S。
S表示一条成语,T表示小明从S查到下一个成语所花费的时间。
每条成语由至少3个汉字组成,每个汉字由4个十六进制数(0~9和A~F)组成。
当N=0时,输入结束。

输出

对于每组输入,输出从列表中的第一个成语开始,到接到列表中的最后一个成语需要的最少时间。
如果无法连接到列表中的最后一个成语,则输出-1。

样例输入

5
5 12345978ABCD2341
5 23415608ACBD3412
7 34125678AEFD4123
15 23415673ACC34123
4 41235673FBCD2156
2
20 12345678ABCD
30 DCBF5432167D
0

样例输出

17
-1

利用Dijkstra寻找最短路径问题,我把每个成语开头结尾的汉字的十六进制数转化为十进制数,即为结点号,就转化为求从第一个成语的结尾字结点到最后一个成语开头字结点的最短路径问题。别忘了加上第一个成语开头到结尾的距离。

代码

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;const int MAXV = 65600;
const int INF = 0x3fffffff;
struct Node {int v, dis;
};
vector<Node> Adj[MAXV];
int n, N;
int d[MAXV];
bool vis[MAXV] = {false};
void Dijkstra(int s){ fill(d, d + MAXV, INF);d[s] = 0;for(int i = 0; i <= N; i++){ int u = -1, MIN = INF; for(int j = 0; j <= N; j++){if(vis[j] == false && d[j] < MIN){u = j;MIN = d[j];}}if(u == -1) return;vis[u] = true; for(int j = 0; j < Adj[u].size(); j++){int v = Adj[u][j].v;if(vis[v] == false && d[u] + Adj[u][j].dis < d[v]){d[v] = d[u] + Adj[u][j].dis;}} }
}int start(string a) {int s = 0, tmp;for(int i = 0; i < 4; i++) {if(a[i] >= '0' && a[i] <= '9') tmp = a[i] - '0';else tmp = a[i] - 'A' + 10;s = s * 16 + tmp;}return s;
}
int end(string a) {int s = 0, tmp;for(int i = a.length() - 4; i < a.length(); i++) {if(a[i] >= '0' && a[i] <= '9') tmp = a[i] - '0';else tmp = a[i] - 'A' + 10;s = s * 16 + tmp;}return s;
}
int main() {while(cin >> n) {if(n == 0) break;fill(vis, vis + MAXV, false);for(int i = 0; i < n; i++){Adj[i].clear();}int s, e, first_time, ds;N = 0;bool flag = false;for(int i = 0; i < n; i++) {         Node tmp;cin >> tmp.dis;string a;cin >> a;int st, ed;         st = start(a), ed = end(a);if(st > N) N = st;if(ed > N) N = ed;tmp.v = ed;Adj[st].push_back(tmp);     if(i == 0) {if(st == ed){flag = true;ds = tmp.dis;} s = ed;first_time = tmp.dis;}if(i == n - 1) {e = st;}           }Dijkstra(s);if(flag) {d[s] = ds;}if(n == 1) {cout << 0 << endl;}else if(d[e] != INF)cout << d[e] + first_time << endl;elsecout << -1 << endl;                      }return 0;
}
/**************************************************************Problem: 1124User: 14041045Language: C++Result: 正确Time:0 msMemory:3876 kb
****************************************************************/

1124: 成语接龙相关推荐

  1. 1124:成语接龙 dfs+一维数组保存结果

     题目描述 小明在玩成语接龙的游戏.成语接龙的规则是,如果成语A的最后一个汉字与成语B的第一个汉字相同,那么成语B就可以接到成语A的后面. 小明现在手上有一本成语词典,每次他都得花费一定时间来从当 ...

  2. 中国电子学会图形化四级编程题:成语接龙

    「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复[Scratch]或[Python],即可进入.如果加入了之前的社群不需要重复加入. 我们将有关编程题目的教学视频已经发布到抖 ...

  3. 8个成语接龙首尾相连_七七八八成语接龙_八开头的成语大全,八结尾的成语接龙...

    向您解答有哪些七七八八的成语接龙是什么?用最后八字结尾来接八开头的成语,就是七七八八的成语接龙了.另外,我们也要知道七七八八的造句子内容更新请继续访问www.mygx.net.,无 第一位 第二位 第 ...

  4. python——成语接龙小游戏

    小试牛刀的简易成语接龙. 思路-- 1.网上下载成语字典的txt版本 2.通过python进行处理得到格式化的成语,并整理成字典(python字典查找速度快) 3.python程序,查找 用户输入的最 ...

  5. 成语json_人工智能测试爬百度成语测成语接龙

    点击关注,我们共同每天进步一点点! 前言 本意,昨晚想发一文,在梳理思路找笔记一小半时,一朋友跟伴侣吵架了,突然从技术写文转变到情感"砖家",微信聊了一个多小时,脑力都用光了,早上 ...

  6. 再谈Weiphp公众平台开发——1、成语接龙插件

    易错点,注意插件的命名 1.创建插件.在weiphp管理后台创建成语接龙插件,勾选安装后立即启用,不需要配置项和管理列表.点"确定"完成插件的创建. 2.安装插件. 3.检测插件是 ...

  7. Flask开发成语接龙游戏,闲来无事手机玩玩自己写的游戏吧!

    英语单词学习应用 周五发布的文章Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署发布后,看到喜欢的人比较多.本来周末打算照着扇贝/极光单词,写一个英语单词自测工具.但苦 ...

  8. 微信小程序在线成语接龙答题有奖1.5.1版源码

    简介: 微信小程序在线成语接龙答题有奖源码是一款搭建在微擎上使用的 成语接龙答题有奖红包,可配合流量主推广,广告变现,后台含有区间余额区间奖励配置,自定义金额提现配置: 题库后台自己输入就可以. 开通 ...

  9. 在线成语接龙答题有奖微信小程序源码V1.5.1

    正文: 微信小程序在线成语接龙答题有奖源码 运行环境:php5.6+mysql5.6 (环境配置为调试时的配置) 域名需配置ssl后才可以通过https访问 程序: wwhted.lanzoue.co ...

最新文章

  1. Django中载入js和css文件
  2. 另类的 高版本数据库 转换到 低版本数据库
  3. python中tushare数据可以导出嘛_Python与交易策略分析tushare/baostock库介绍(附代码)...
  4. 后端连接oracle,【后端开发】php怎么远程连接oracle
  5. 在VB6中保存单色(1Bit)位图(VB6代码)
  6. PHP字体向右移动,CSS3如何实现文字向右循环闪过效果以及可在移动端使用的实例代码分享...
  7. 后缀表达式----栈
  8. java调用matlab的jar包
  9. Node之HTTPS客户端
  10. mysql5.7压缩包安装教程
  11. 知识分享之Golang——在Golang中unicode码和中文的互相转换函数
  12. 去除控制台的Vue warn警告信息
  13. 什么是promise?
  14. Java take和poll,Java多线程-CompletionService
  15. 2021年中国冰雪旅游行业市场现状分析,“三足鼎立、两带崛起、全面开花”新格局形成「图」
  16. 笔记本win10宽带共享wifi热点教程
  17. java基础知识-----转
  18. 【PTA】斐波那契数列第n项
  19. 百问网物联网智能家居学习笔记day6
  20. 使用MATLAB绘制Gazebo中的仿真小车的运动轨迹

热门文章

  1. colt python 357magnum_357磁(357 Magnum)——欧美十佳手枪
  2. 低成本精准营销助推中小企业度过经济寒冬
  3. pythoc_autocad_标注_all_横线_竖线
  4. 天猫+淘宝+聚划算,阿里电商多元化格局凸显
  5. 毕业论文word文档排版教程(动图的方式演示,针对wps)
  6. C# 得到变量的类型
  7. 关于单页应用(SPA)的经验之谈
  8. java显示图片缩略图_java中生成图片的缩略图
  9. 【论文精读】resnet精读
  10. 记录一次MySQL数据库失败教训