21. 成语接龙

这篇具有很好参考价值的文章主要介绍了21. 成语接龙。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

 21. 成语接龙,北理工程设小学期,算法,c++,图论

 解题思路:

正解bfs

其他方法:

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

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

代码:文章来源地址https://www.toymoban.com/news/detail-706922.html

#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;  
}  

到了这里,关于21. 成语接龙的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 并查集维护额外信息,算法思路类似前缀和,结构类似扑克接龙

    240. 食物链 动物王国中有三类动物 A,B,CA,B,C, 这三类动物的食物链构成了有趣的环形 。 AA 吃 BB,BB 吃 CC,CC 吃 AA。 现有 NN 个动物,以 1∼N 1∼N 编号 。 每个动物都是 A,B,CA,B,C 中的一种,但是我们并不知道它到底是哪一种。 有人用两种说法对这 NN 个动物所构成的

    2024年02月14日
    浏览(37)
  • 【23-24 秋学期】NNDL 作业13 优化算法3D可视化

    分别画出  和  的3D图 代码如下: 分别画出  和  的3D轨迹图 (1) 结果如下:  (2) 结合3D动画,用自己的语言,从轨迹、速度等多个角度讲解各个算法优缺点 Animations that may help your intuitions about the learning process dynamics.  Left: Contours of a loss surface and time evolution of different

    2024年02月04日
    浏览(38)
  • FPGA纯verilog代码实现8位精简指令集CPU,一学期的微机原理不如看懂这套代码,提供工程源码和技术支持

    本文章主要针对大学本科阶段学生; 读文章之前先来几个灵魂拷问: 1、你是否学过《微机原理》、《单片机》、《汇编语言》之类有关微型计算机的课程? 2、上这些课时你的老师是否只是机械的讲着PPT,你听着无聊,听不懂,逐渐对计算机专业产生了畏惧? 3、这些计算机

    2024年02月11日
    浏览(52)
  • 机器学习21:机器学习工程落地注意事项-I

    目录  1.静态训练与动态训练 1.1 如何选择训练方式? 2.静态与动态推理

    2024年02月12日
    浏览(47)
  • python-产品篇-游戏-成语填填乐

    无需其他文件,复制即用

    2024年02月19日
    浏览(28)
  • 【C++算法竞赛 · 图论】图论基础

    前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类: 按边的类型分类: 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 图论(Graph theory) ,是 OI 中的一样很大的一个模块,围绕它有很多高难度的算法以及高级的概念。 这篇文章将介绍关

    2024年04月12日
    浏览(42)
  • 图论与算法(1)图论概念

    在计算机科学中,图论与算法是两个重要且紧密相关的领域。图论研究图的性质和特征,而算法设计和分析解决问题的方法和步骤。图论提供了一种形式化的方法来描述和分析各种关系和连接,而算法则为解决图相关的问题提供了有效的解决方案。 图论是研究图的结构和性质

    2024年02月07日
    浏览(41)
  • Python写个小游戏:看图猜成语(上)

    大家好,又见面了,经过前几篇文章的连载,相信大家再通过自学,一定都掌握了Python的基础知识了吧。😄 今天开始,问哥开始带着大家逐步向图形化界面前进了。 说实话,玩游戏,更多的时候还是需要图形化界面的,这都2022年了,文字版游戏的年代早过去了。虽然问哥也

    2024年02月07日
    浏览(32)
  • fl studio 21打不开,FL工程文件也打不开怎么办?

    FL Studio 21全称Fruity Loops Studio,就是大家熟悉的水果编曲软件,一个全能的 音乐制作软件 ,包括编曲、录音、剪辑和混音等诸多功能,让你的电脑编程一个全能的录音室。FL Studio 21版本发布了,为我们带来了多种新功能,大大提高处理效率,轻松应对各种复杂的编曲任务. ​

    2024年02月07日
    浏览(61)
  • Ubuntu软件源、pip源大全,国内网站网址,阿里云、网易163、搜狐、华为、清华、北大、中科大、上交、山大、吉大、哈工大、兰大、北理、浙大

    网址:https://developer.aliyun.com/mirror/ 选择ubuntu 然后会找到软件源的网址 网址:http://mirrors.163.com/ ubuntu帮助地址:http://mirrors.163.com/.help/ubuntu.html 里面会找到换源的网址 http://mirrors.sohu.com/ https://mirrors.huaweicloud.com/home 网址:https://mirrors.tuna.tsinghua.edu.cn/ ubuntu帮助地址:https://mir

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包