21. 成语接龙

2023-11-08

小张非常喜欢与朋友们玩成语接龙的游戏,但是作为“文化沙漠”的小张,成语的储备量有些不足。现在他的大脑中存储了m个成语,成语中的四个汉字都用一个1000000以内的正整数来表示。现在小张的同学为了考验他给出了他一个成语做开头和一个成语做结尾,如果小张能通过成语接龙的方式说到结尾的成语,他就能够成功完成游戏。他想知道最少能说几个成语能够成功完成游戏。

 

 解题思路:

正解bfs

其他方法:

我们可以不用考虑成语中间的两个数字,如果使用这个成语来进行接龙,我们就相当于从成语的第一个数字通过一条路走到了另一个数字,这样的话每一个成语就相当于一条从成语第一个数字到结尾数字的一条路,因此直接用最短路模型求最短路即可。

这里需要注意我们再求的时候要特判开头成语和结尾成语是否是一个,如果是,输出1,否则以第一个成语的结尾为起点,最后一个成语的开头为终点,计算最短路,再加上开头结尾的2.

代码:

#include <cstring>  
#include <iostream>  
#include <algorithm>  
#include <queue>  
#include <map>  
#include <vector>  
using namespace std;  
int n, m;  
const int N = 1000010;  
int h[N], w[N], e[N], ne[N], idx;  
int dist[N];  
bool st[N];  
int s[4],ed[4];  
void add(int a, int b, int c)  
{  
    e[idx] = b, w[idx] = c, ne[idx] = h[a], h[a] = idx ++ ;  
}  
  
int spfa()  
{  
    memset(dist, 0x3f, sizeof dist);  
    dist[s[3]] = 0;  
    st[s[3]] = true;  
    queue<int> q;  
    q.push(s[3]);  
    while (q.size())  
    {  
        int t = q.front();  
        st[t] = false;  
        q.pop();  
        for (int i = h[t]; i != -1; i = ne[i])  
        {  
            int j = e[i];  
            if (dist[j] > dist[t] + w[i])  
            {  
                dist[j] = dist[t] + w[i];  
                if (!st[j])  
                {  
                    st[j] = true;  
                    q.push(j);  
                }  
            }  
        }  
    }  
    return dist[ed[0]];  
}  
int main()  
{  
    memset(h, -1, sizeof h);  
    ios::sync_with_stdio(false);  
    cin.tie(0);  
    cout.tie(0);  
    int n;  
    cin>>n;  
    int x[4];  
    for(int i=1;i<=n;i++){  
        cin>>x[0]>>x[1]>>x[2]>>x[3];  
        add(x[0],x[3],1);  
    }  
    for(int j=0;j<=3;j++){  
        s[j]=0;  
        cin>>s[j];  
        //cout<<s[j]<<endl;  
    }  
    for(int j=0;j<=3;j++){  
        ed[j]=0;  
        cin>>ed[j];  
    }  
    bool ff=1;  
    for(int j=0;j<=3;j++){  
        //cout<<s[j]<<ed[j];  
        if(s[j]!=ed[j]){  
            ff=0;break;}  
    }  
    if(ff){  
        cout<<1<<endl;  
        return 0;  
    }  
    else{  
        spfa();  
    if(dist[ed[0]]<0x3f3f3f3f/2)cout<<dist[ed[0]]+2<<endl;  
    else cout<<-1<<endl;  
    }   
    return 0;  
}  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

21. 成语接龙 的相关文章

  • 如何验证文件名称在 Windows 中是否有效?

    是否有一个 Windows API 函数可以将字符串值传递给该函数 该函数将返回一个指示文件名是否有效的值 我需要验证文件名是否有效 并且我正在寻找一种简单的方法来完成此操作 而无需重新发明轮子 我正在直接使用 C 但针对的是 Win32
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • 如何使用GDB修改内存内容?

    我知道我们可以使用几个命令来访问和读取内存 例如 print p x 但是如何更改任何特定位置的内存内容 在 GDB 中调试时 最简单的是设置程序变量 参见GDB 分配 http sourceware org gdb current onl
  • pthread_cond_timedwait() 和 pthread_cond_broadcast() 解释

    因此 我在堆栈溢出和其他资源上进行了大量搜索 但我无法理解有关上述函数的一些内容 具体来说 1 当pthread cond timedwait 因为定时器值用完而返回时 它如何自动重新获取互斥锁 互斥锁可能被锁定在其他地方 例如 在生产者
  • C++ 子字符串返回错误结果

    我有这个字符串 std string date 20121020 我正在做 std cout lt lt Date lt lt date lt lt n std cout lt lt Year lt lt date substr 0 4 l
  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • C - 找到极限之间的所有友好数字

    首先是定义 一对友好的数字由两个不同的整数组成 其中 第一个整数的除数之和等于第二个整数 并且 第二个整数的除数之和等于第一个整数 完美数是等于其自身约数之和的数 我想做的是制作一个程序 询问用户一个下限和一个上限 然后向他 她提供这两个限
  • 将目录压缩为单个文件的方法有哪些

    不知道怎么问 所以我会解释一下情况 我需要存储一些压缩文件 最初的想法是创建一个文件夹并存储所需数量的压缩文件 并创建一个文件来保存有关每个压缩文件的数据 但是 我不被允许创建许多文件 只能有一个 我决定创建一个压缩文件 其中包含有关进一步
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 在 ASP.NET Core 3.1 中使用包含“System.Web.HttpContext”的旧项目

    我们有一些用 Net Framework编写的遗留项目 应该由由ASP NET Core3 1编写的API项目使用 问题是这些遗留项目正在使用 System Web HttpContext 您知道它不再存在于 net core 中 现在我们
  • 如何将单个 char 转换为 int [重复]

    这个问题在这里已经有答案了 我有一串数字 例如 123456789 我需要提取它们中的每一个以在计算中使用它们 我当然可以通过索引访问每个字符 但是如何将其转换为 int 我研究过 atoi 但它需要一个字符串作为参数 因此 我必须将每个字
  • clang 实例化后静态成员初始化

    这样的代码可以用 GCC 编译 但 clang 3 5 失败 include
  • Discord.net 无法在 Linux 上运行

    我正在尝试让在 Linux VPS 上运行的 Discord net 中编码的不和谐机器人 我通过单声道运行 但我不断收到此错误 Unhandled Exception System Exception Connection lost at
  • 将 unsigned char * (uint8_t *) 转换为 const char *

    我有一个带有 uint8 t 参数的函数 uint8 t ihex decode uint8 t in size t len uint8 t out uint8 t i hn ln for i 0 i lt len i 2 hn in i
  • 如何让Gtk+窗口背景透明?

    我想让 Gtk 窗口的背景透明 以便只有窗口中的小部件可见 我找到了一些教程 http mikehearn wordpress com 2006 03 26 gtk windows with alpha channels https web
  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 为什么 C# Math.Ceiling 向下舍入?

    我今天过得很艰难 但有些事情不太对劲 在我的 C 代码中 我有这样的内容 Math Ceiling decimal this TotalRecordCount this PageSize Where int TotalRecordCount
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • C 中的异或运算符

    在进行按位操作时 我在确定何时使用 XOR 运算符时遇到一些困难 按位与和或非常简单 当您想要屏蔽位时 请使用按位 AND 常见用例是 IP 寻址和子网掩码 当您想要打开位时 请使用包含或 然而 XOR 总是让我明白 我觉得如果在面试中被问
  • 如何在 C++ BOOST 中像图形一样加载 TIFF 图像

    我想要加载一个 tiff 图像 带有带有浮点值的像素的 GEOTIFF 例如 boost C 中的图形 我是 C 的新手 我的目标是使用从源 A 到目标 B 的双向 Dijkstra 来获得更高的性能 Boost GIL load tiif

随机推荐

  • Tensorflow报错:AttributeError: 'module' object has no attribute 'summary'

    这是因为API的版本不对 导致AttributeError module object has no attribute summary 想想并没有修改什么 只是服务器被重装了驱动 会不会是这个原因呢 对了 同事说在服务器上装了tensor
  • SectionList 嵌套FlatList实现Grid和Flat列表

    直接上代码 遇到问题查解决方法的时候还是先看官方文档把 百度的博客实在是坑啊 特别是那个某博客的有个sectionlist简直了 sectionlist里竟然来个numColumns 明明没有的事也不知道他哪里偷的文档 结果苦逼的研究半天
  • CSDN 软件开发新手赛正式启动,召集热爱编程的你

    2021年12月21日起 CSDN软件开发新手赛正式启动 此次大赛是基于 C认证 见习工程师能力认证 标准而设立的编程比赛 只要你想成为Java Python 前端 全栈工程师 无论你是职场小白 在校学生还是编程爱好者 皆可免费报名参与 大
  • 安装mmcv

    安装MMCV 创建虚拟环境gupao 并激活 nvcc V 查看cuda版本 打开当前项目文件主页查看环境配置Prerequisites MMPretrain 1 0 1 documentation 4 安装合适的torch版本 原来的版本
  • 【数据分析】Python:处理缺失值的常见方法

    在数据分析和机器学习中 缺失值是一种常见的现象 在实际数据集中 某些变量的某些条目可能没有可用的值 处理缺失值是一个重要的数据预处理步骤 在本文中 我们将介绍如何在 Pandas 中处理缺失值 我们将探讨以下内容 什么是缺失值 如何在 Pa
  • Java之String类

    作者简介 zoro 1 目前大二 正在学习Java 数据结构等 作者主页 zoro 1的主页 欢迎大家点赞 收藏 加关注哦 Java之String类 String的构造 String底层 String之间的比较 比较内容 比较地址 字符串查
  • [用python辅助学生中考与高考-3]:中考科技特长生知多少

    目录 前言 1 什么是科技特长生 2 科技特长生政策正在覆盖全国 3 科技特长生招生流程 1 制定章程 2 考生报名 考生自主报名 3 专业加试 考试 4 预录取 5 上报名单 6 名单公示 7 参加考试 8 正式录取 4 如何布局中考科技
  • 毕业设计-基于 MATLAB 的图像边缘检测算法的研究和实现

    目录 前言 课题背景和意义 实现技术思路 一 MATLAB概述 二 图像边缘检测 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求
  • 2021-11-24 qt 串口

    这货跟vb 比 就系更方便了 打完收工
  • 正则表达式 匹配以特定字符串开头 到任意第一个字符中间的空格

    lt p style text indent 2em S 正则表达式 匹配以特定字符串开头 到任意第一个字符中间的空格 lt p p style text indent 2em u4e00 u9fa5 正则表达式 匹配以特定字符串开头 到任
  • 2021年的保研之旅总结

    保研之旅 个人情况介绍 1 学校 末流211 2 专业 信息管理与信息系统 信管算管理学位 保研的时候有的时候会被认为是跨保的 3 绩点 1 36 4 比赛获奖 没有什么拿得出手的获奖 只有一些小奖 全国大学生物联网设计竞赛全国一等奖 美国
  • robotframework-ride安装注意点

    欢迎关注 无量测试之道 公众号 回复 领取资源 Python编程学习资源干货 Python Appium框架APP的UI自动化 Python Selenium框架Web的UI自动化 Python Unittest框架API自动化 资源和代码
  • Server2008R2:由于没有远程桌面授权服务器可以提供许可证,远程会话被中断.的解决方法,求大神们指导

    出现 由于没有远程桌面授权服务器可以提供许可证 远程会话被中断 问题是因为微软默认的远程登录只提供120天的使用期限 解决该问题的具体步骤如下 1 打开运行 在运行中输入注册表命令 regedit 然后回车通过命令打开注册表对话框 2 在注
  • 获取windows中活跃的Com口

    获取windows中活跃的Com口 记录于2021年11月9日 今天对我来说是个很特殊的一天 母胎SOLO二十一周年 无奈 Orz 闲暇之余写下此文章 记录一下我的日常 文章目录 获取windows中活跃的Com口 前言 一 如何寻找活跃C
  • “另一个程序正在使用此文件,进程无法访问”的解决方法

    另一个程序正在使用此文件 进程无法访问 的解决方法 参考文章 1 另一个程序正在使用此文件 进程无法访问 的解决方法 2 https www cnblogs com shiningrise archive 2012 12 02 279812
  • apache 2.4 配置php,Apache2.4 PHP 配置

    Apache2 4服务器 http www apachehaus com cgi bin download plx APACHE24VC14 64位 http www apachehaus com cgi bin download plx
  • Vue创建Demo项目

    Vue创建Demo项目 Vue 发音为 vju 类似 view 是一款用于构建用户界面的 JavaScript 框架 它基于标准 HTML CSS 和 JavaScript 构建 并提供了一套声明式的 组件化的编程模型 帮助你高效地开发用户
  • 魔兽怀旧服联盟服务器不稳定,魔兽世界怀旧服上次被联盟攻击至少三个月前,“单边服”何去何从...

    游戏中我们是朋友 聊天侃地 在这里我们可以无拘无束的发言 不会有任何人阻挠 还有大家最喜欢吐槽的小编 请把口水收集好 随时准备和小编一起吐槽 魔兽世界怀旧服上次被联盟攻击至少三个月前 单边服 何去何从 今天公会一个人表示他被联盟杀了 大家都
  • React性能优化的手段有哪些

    1 使用纯组件 2 使用 React memo 进行组件记忆 React memo 是一个高阶组件 对 于相同的输入 不重复执行 3 如果是类组件 使用 shouldComponentUpdate 这是在重新渲染组件之前触发的其中一个生命周
  • 21. 成语接龙

    小张非常喜欢与朋友们玩成语接龙的游戏 但是作为 文化沙漠 的小张 成语的储备量有些不足 现在他的大脑中存储了m个成语 成语中的四个汉字都用一个1000000以内的正整数来表示 现在小张的同学为了考验他给出了他一个成语做开头和一个成语做结尾