算法提高之字串变换

算法提高之字串变换

  • 核心思想:双向广搜

    • 双向bfs 建立两个队列 一起bfs到中间态
    • 在这里插入图片描述
  •   #include <iostream>#include <cstring>#include <algorithm>#include <queue>#include <unordered_map>using namespace std;const int N = 6;int n;string A,B;string a[N],b[N];int extend(queue<string>& q, unordered_map<string, int>&da, unordered_map<string, int>& db, string a[N], string b[N]){int d = da[q.front()];  //确定当前层数while(q.size() && da[q.front()] == d)  //如果是同一层的就搜{auto t = q.front();q.pop();for(int i=0;i<n;i++)  //遍历所有规则{for(int j=0;j<t.size();j++){if(t.substr(j,a[i].size()) == a[i])  //有相应的子串{//构造新的字符串string r = t.substr(0,j) + b[i] + t.substr(j+a[i].size());if(db.count(r)) return da[t] + db[r] + 1;  //如果b中已经搜到过if(da.count(r)) continue;da[r] = da[t] + 1;q.push(r);}}}}return 11;}int bfs(){if(A == B) return 0;queue<string> qa,qb;unordered_map<string,int> da,db;qa.push(A), qb.push(B);da[A] = db[B] = 0;int step = 0;  //记录步数 如果超过10 直接return -1while(qa.size() && qb.size()){int t;//优先扩展长度短的那个if(qa.size()<qb.size()) t = extend(qa,da,db,a,b);  //注意规则是a->belse t = extend(qb,db,da,b,a);  //规则是b->a 反向if(t <= 10) return t;  //没找到之前会返回一个>10的数if(++ step == 10) return -1;}return -1;}int main(){cin>>A>>B;while(cin>>a[n]>>b[n]) n++;int t = bfs();if (t == -1) puts("NO ANSWER!");else cout << t << endl;}
    

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691123.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

车载测试和传统测试有什么区别

搞清楚车载测试和传统应用测试的区别,就可以大胆冲冲冲! 车载测试随着市场的需求量增加又火来一波,一直’遥遥领先’的我们一定要告诉大家一个事实:车载测试和传统的应用测试是有很大区别的. 测试对象不一样 传统测试:测试的对象无非就是各种应用,比如电脑端的web系统(使用浏…

Xilinx 千兆以太网TEMAC IP核 AXI4-Lite接口信号

在AX4总线标准中&#xff0c;AXI4-Lite主要由向她址映射型通信。TEMAC的管理法口采用AXI4-Lite标准接口&#xff0c;TEMAC核的AX14-Lite接口信号如表1所示&#xff0c;根据AX14-Lite标准&#xff0c;接口角色分为主接口(Maser Interface)和从接口(Slave Interface)。主接口为通…

手写Windows文件路径获取小工具

手写Windows文件路径获取小工具 目的 给Windows右键增加功能&#xff0c;右键任何文件&#xff08;夹&#xff09;显示复制文件路径的扩展。 效果展示 实现思路 右键调用&#xff0c;自身会把文件路径传递给被调用文件&#xff0c;被调用文件内只需将路径参数复制到剪贴板即…

linux下的进程通信

进程通信 进程为什么需要通信呢&#xff1f;进程通信的技术背景进程通信本质 进程通信分类管道匿名管道pipe匿名管道原理管道特点 命名管道创建命名管道命名管道原理 System V IPC管道与 System V的区别共享内存函数ftok()shmget() shmat()shmdt()shmctl()删除共享内存System V…

linux系统(ubuntu)调用科大讯飞SDK实现语音识别

1. 科大讯飞官网 登录注册实名制 2. 点击控制台&#xff0c;创建应用 点击左侧的语音听写&#xff0c;右边下滑选择Linux&#xff0c;点击下载 选择Linux平台&#xff0c;普通版本&#xff0c;语音听写&#xff0c;SDK下载 此时将得到一个压缩包&#xff0c;选择的功能不…

【漏洞复现】泛微OA E-Cology portalTsLogin文件读取漏洞

漏洞描述&#xff1a; 泛微E-Cology是一款面向中大型组织的数字化办公产品&#xff0c;它基于全新的设计理念和管理思想&#xff0c;旨在为中大型组织创建一个全新的高效协同办公环境。泛微OA E-Cology portalTsLogin存在任意文件读取漏洞&#xff0c;允许未经授权的用户读取服…

【经验分享】图片自适应窗口大小css;CSS实现背景图片全屏铺满自适应的方式

目录 设置背景颜色和边距 设置背景图片 调整背景图片尺寸和位置 完整代码 使用效果如下&#xff08;展示&#xff09; 网页版图片效果展示 手机版图片效果展示 如何使用 CSS 创建网页背景效果 在网页设计中&#xff0c;背景是一个重要的视觉元素&#xff0c;它可以为网…

SEO之为什么研究关键词(一)

初创企业需要建站的朋友看这篇文章&#xff0c;谢谢支持&#xff1a; 我给不会敲代码又想搭建网站的人建议 新手上云 初做网站的人很容易犯的最大错误之一是&#xff0c;脑袋一拍就贸然进入某个领域&#xff0c;跳过竞争研究&#xff0c;没规划好目标关键词就开始做网站。这样做…

Jmeter中线程组介绍

1.线程数的意义 Jmeter采用了线程来模拟用户&#xff0c;即1个线程代表1个用户&#xff0c;线程可以简单理解为计算机处理任务时的一个具体执行人。 一个任务可以由多个人&#xff08;线程&#xff09;共同完成&#xff0c;也可以由一个人&#xff08;线程&#xff09;来完成&a…

美股市场恒生指数冲刺19000点关口 地产股大涨

查查配5月10日电(中新财经记者 谢艺观)5月10日,港股现强势行情,恒生指数盘中一度冲至18993.28点,距离19000点关口仅一步之遥。 美港通证券以其专业的服务和较低的管理费用在市场中受到不少关注。该平台提供了实盘交易、止盈止损、仓位控制等功能,旨在为投资者提供更为全面的投…

C# 统计代码运行时长

using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms;namespace Sci {/// <summary>/// 统计代码…

如何在计算机上安装两个系统并引导?这里有详细步骤

序言 大多数计算机附带一个操作系统&#xff0c;但你可以在一台电脑上安装多个操作系统。安装两个操作系统&#xff0c;并在启动时在它们之间进行选择。 谷歌和微软终止了英特尔的双启动Windows和Android PC计划&#xff0c;但你可以在安装Windows 7的同时安装Windows 8.1&am…