https://www.luogu.org/problemnew/show/P1032
题目描述
已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则):

A 1-> B 1
A 2 -> B 2
​

规则的含义为:在 A中的子串A 1
​可以变换为 B 1,A 2可以变换为B 2
​ …。

例如:A='abcd'B='xyz'

变换规则为:

‘abc’->‘xu’‘ud’->‘y’‘y’->‘yz’

则此时,A可以经过一系列的变换变为B,其变换的过程为:

‘abcd’->‘xud’->‘xy’->‘xyz’

共进行了3次变换,使得AA变换为BB。

输入输出格式
输入格式:
输入格式如下:

AA BB
A 1 B 1
A 2 B 2

|-> 变换规则

… … /

所有字符串长度的上限为20。

输出格式:
输出至屏幕。格式如下:

若在10步(包含10步)以内能将A变换为B,则输出最少的变换步数;否则输出"NO ANSWER!"

输入输出样例
输入样例#1:

abcd xyz
abc xu
ud y
y yz

输出样例#1:

3

ac_code:
/*
每个点是一个字符串,想到用map标记~
之前用dfs做只有60分,然后第一次用bfs做80分,最后组数据WA
WA的点就是,没有考虑到一个串对于一种转换规则可能会有多个位置可变,而他们都是1步到达:
比如:

aacadb   abcdef(原串,目标串)
a  b(其中一条转换规则)
一步就可以得到:
bacadb
abcadb
aacbdb

所以对于原串不是找到一处匹配的就变换后进行下个规则
而是继续对于这个规则找找看一下有没有其他地方可以匹配
so对于查询是否有可以使用转换规则时要用while
还有对于输入,它规则个数是不确定的,可以用ctrl+z结束输入,但是要记录到底用多少条规则
*/

#include <iostream>
#include <string>
#include <queue>
#include <map>
using namespace std;
struct rules
{string A;string B;int len_a;
} data[10];
string s,e;
int cnt;
map<string,bool>vis;
map<string,int>step;
int bfs()
{queue<string>q;q.push(s);vis[s] = true;while(!q.empty()){string k = q.front();if(step[k] > 10){break;}q.pop();if(k == e){return step[k];}for(int i = 0; i < cnt; i++){int pos = -1;//string t = k; //如果要直接用replace要先记录下原串while(k.find(data[i].A,pos+1)!=string::npos){pos = k.find(data[i].A,pos+1);//cout<<pos<<endl;if(pos != -1){string s1 = k.substr(0,pos);int t = pos + data[i].len_a;string s2 = k.substr(t,k.length()-t);string now = s1 + data[i].B + s2;//string now = k.replace(pos,data[i].len_a,data[i].B);//replace会使原串改变//k = t;//cout<<now<<" "<<k<<endl;if(!vis[now]){vis[now] = true;step[now] = step[k] + 1;q.push(now);}}}}}return -1;
}
int main()
{cin>>s>>e;for(int i = 0; i < 6; i++){cin>>data[i].A>>data[i].B;data[i].len_a = data[i].A.length();if(data[i].A == "\0")break;else cnt++;}int ans = bfs();if(ans != -1)cout<<ans<<endl;elsecout<<"NO ANSWER!"<<endl;return 0;
}

P1032 字串变换(bfs)相关推荐

  1. 洛谷P1032字串变换题解--zhengjun

    题目描述 已知有两个字串A,BA,BA,B及一组字串变换的规则(至多666个规则): A1A_1A1​ −-−> B1B_1B1​ A2A_2A2​ −-−> B2B_2B2​ 规则的含义 ...

  2. 洛谷P1032 字串变换

    字符串的题目一般都很恶心,特别是当你妄图只用原生c语言的char去做的时候. string类虽然方便,但是相较于char慢很多.可是慢所带来的好处就是可以方便的完成很多操作.例如用string去实现这 ...

  3. 【题解】luogu p1032 字串变换

    总结: 1.bfs的模板没有掌握好 2.string s 的时候可以用s[m]=x 将s字符串中的m位置的字符改变成x字符 一道简单的bfs #include<bits/stdc++.h> ...

  4. P1032 字串变换

    题面:https://www.luogu.org/problem/P1032 本题中需熟练掌握string类型的库函数: string a,b; a.find(b,pos)为 从pos开始找b第一次出 ...

  5. 广度优先搜索——字串变换(洛谷 P1032)

    题目选自洛谷P1032 题意已经把做法写得特别露骨了...最小步数,最多6个变换规则....广搜自不必说,不仅可以寻找解而且还能判断步数(根据广搜首解最优的性质可以得到). 用queue来进行广搜,需 ...

  6. 字串变换(洛谷-P1032)

    题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...

  7. P1032 [NOIP2002 提高组] 字串变换

    展开 题目背景 本题疑似错题,不保证存在靠谱的多项式复杂度的做法.测试数据非常的水,各种做法都可以通过,不代表算法正确.因此本题题目和数据仅供参考. 题目描述 已知有两个字串 A,BA,B 及一组字串 ...

  8. 1099 字串变换 2002年NOIP全国联赛提高组

    1099 字串变换 2002年NOIP全国联赛提高组  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 已知有两个字串 A ...

  9. [COGS 0065][NOIP 2002] 字串变换

    65. [NOIP2002] 字串变换 ★★   输入文件:string.in   输出文件:string.out   简单对比 时间限制:1 s   内存限制:128 MB [问题描述] 已知有两个 ...

最新文章

  1. DCCI:Web3.0时代 微博未来有望突破4.6亿
  2. html中小于和大于怎么判断,html – CSS nth-child大于和小于
  3. Ucloud 文件上传
  4. wxWidgets:wxAccessible类用法
  5. 低碳生活:充电电池及充电器
  6. pytorch指定用多张显卡训练_Pytorch中多GPU训练指北
  7. our happy ending(状压dp)
  8. [BZOJ1635][Usaco2007 Jan]Tallest Cow 最高的牛
  9. 基于jQuery的uploadify(flash上传文件)控件v1.6.2 bug修正
  10. omv搭建php,家用NAS系统openmediavault插件开发
  11. 写DM9000网卡芯片驱动的预备知识
  12. linux sed替换行,shell - 使用Sed替换包含字符串的整行
  13. 洛谷(Python) P3717 [AHOI2017初中组]cover
  14. P2837 [USACO08FEB]Dining Cows B 题解
  15. 升级计算机的图形卡和驱动程序,电脑显卡驱动程序需要随时更新到最新版本吗?...
  16. wine 安装(ubuntu中安装windows下软件)
  17. 嵌入式系统的应用领域
  18. 厦门one_理想汽车称厦门事故系因用户驾驶不慎碰撞所致,曾现多次起火情况
  19. SUST Weekly Final Round One 参考题解
  20. RSA大数运算实现(1024位n)(3)

热门文章

  1. es filter过滤器_Elasticsearch 之 Filter 与 Query 有啥不同?
  2. 计算机控制技术在线,西交19春《计算机控制技术》在线作业【标准答案】
  3. java对象赋值_Java 对象不使用时为什么要赋值为 null?
  4. 使用jena 进行RDF推理
  5. 肝货!你想要的资源这里都有!
  6. 写 Python 爬虫 5 年,复制粘贴一直是我赖以生存的核心技能,直到我看到这些腾讯阿里大佬们的技术公众号,太强了...
  7. 【推荐一位Python大佬】 从程序员到创业者,再到自由职业
  8. 深度学习模型大合集:GitHub 趋势榜第一,已斩获 8000+ 星
  9. php7.0 cli,PHP-7.1 源代码学习:php-cli 启动流程
  10. mysql数据库模型生成表_PowerDesigner逆向生成MYSQL数据库表结构总结