LuoguP1032 字符变换(BFS)
题目链接为:https://www.luogu.org/problemnew/show/P1032
思路:看到数据比较小,而且最多有6个规则,就可以用搜索去做了,我用的BFS,大体思路如下:
- 定义结构体表示状态,其中包括字符串str和当前步数num;并定义该结构体的队列;
- 用map实现string到int的映射,用来记录某个状态是否到达过,若到达过,标记为1,否则为0;
- bfs函数中就是bfs的经典模块,有个难点是从当前状态搜时,不仅要考虑遍历每一个规则的情况,而且要注意在某一规则中母串中可能有多个字串可以被替换,必须都考虑到,否则会被第5个数据卡。
下面是AC代码:
#include<cstdio>
#include<string>
#include<queue>
#include<iostream>
#include<map>
using namespace std; struct node{
string str;
int num;
}nod; queue<node> q;
map<string,int> m;
string a,b;
string aa[],bb[];
int n=; void bfs(){
q.push(nod);
while(!q.empty()){
node now=q.front();q.pop();
string ns=now.str;
int nn=now.num;
if(nn>){
printf("NO ANSWER!\n");
return;
}
if(ns==b){
printf("%d\n",nn);
return;
}
for(int i=;i<n;i++){
int index=ns.find(aa[i],);
while(index!=string::npos){
string tmp=ns;
tmp.replace(index,aa[i].length(),bb[i]);
if(!m[tmp]){
m[tmp]=;
nod.str=tmp;
nod.num=nn+;
q.push(nod);
}
index=ns.find(aa[i],index+aa[i].length());
}
}
}
printf("NO ANSWER!\n");
} int main(){
cin>>a>>b;
while(cin>>aa[n]>>bb[n])
n++;
nod.str=a;
nod.num=;
m[a]=;
bfs();
return ;
}
LuoguP1032 字符变换(BFS)的更多相关文章
- 洛谷 P1032 字符变换
洛谷 P1032 字符变换 题目描述 已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A 中的子串 A1 ...
- NOIP2002字串变换[BFS]
题目描述 已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则): A1$ -> B1$ A2$ -> B2$ 规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$.A2 ...
- 字串变换 bfs + 字符串
题目描述 已知有两个字串A,BA,BA,B及一组字串变换的规则(至多666个规则): A1A_1A1 ->B1 B_1B1 A2A_2A2 -> B2B_2B2 规则的含义为:在 ...
- NOIP2002 字符变换
啊本来以为2002的题应该会比较友善于是很naive地像模拟一样用着stl乱玩结果死也过不了最后一个点qaq 心情很悲痛于是为了解放自我 #include<iostream> #inclu ...
- luogu题解P1032字串变换--BFS+STL:string骚操作
题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...
- python中实现打印特定字符变换
首先需要将 lib文件 放在该文件同一目录 使用的时候,先导入 from lib.common import print_msg ,然后调用里面的 print_msg() 方法即可! lib文件地址: ...
- leetcode 学习心得 (1) (24~300)
源代码地址:https://github.com/hopebo/hopelee 语言:C++ 24.Swap Nodes in Pairs Given a linked list, swap ever ...
- $NOIp$提高组历年题目复习
写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...
- Educational Codeforces Round 89 (Rated for Div. 2) C. Palindromic Paths(贪心)
题目链接:https://codeforces.com/contest/1366/problem/C 题意 有一个 $n \times m$ 的 $01$迷宫,要使从 $(1,1)$ 到 $(n,m) ...
随机推荐
- HDU 1116 Play on Words(并查集和欧拉回路)(有向图的欧拉回路)
Play on Words Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)To ...
- VS2005常用快捷键
Visual C++ 2005有很多种快捷键的映射方案,有适合 Emacs 用户的,有适合 Visual C++ 6.0 用户的,也有 Visual Studio 2005的,下面的快捷键符合IDE默 ...
- python selenium 问题汇总
FAQ 1.python+selenium+Safari浏览器,定位元素 selenium.common.exceptions.ElementNotVisibleException: Message: ...
- PHP PDO prepare()、execute()和bindParam()方法详解
每次将查询发送给MySQL服务器时,都必须解析该查询的语法,确保结构正确并能够执行.这是这个过程中必要的步骤,但也确实带来了一些开销.做一次是必要的,但如果反复地执行相同的查询,批量插入多行并只改变列 ...
- 【Codeforces】CF 9 D How many trees?(dp)
题目 传送门:QWQ 分析 用$ dp[i][j] $表示用i个节点,有多少深度小于等于j的二叉树. 答案是$ dp[n][n] - dp[n][h-1] $ 转移时枚举左子树的节点数量,就可以知道右 ...
- [jni]Getting Started
写一个java应用程序来调用C函数打印“Hello World!" 这个过程包括以下步骤: 1:创建一个申明了native方法的java类(HelloWorld.java): 2:使用jav ...
- js常见兼容
滚动条的兼容写法(谷歌chrome) document.documentElement.scrollTop || document.body.scrollTop 阻止浏览器默认行为的兼容写法 e ...
- python入门-函数(一)
1定义函数并且调用 注释语句""" """ def greet_user(): """显示简单的问候语&qu ...
- openx ————带整理
the initialisation file 初始化文件 Security check 安全检查 /work/puti-api-1.0/www/adapi/lib/OA/Admin/ ...
- shell echo 打印换行
echo -e "aaaaaaaaaaaaaaaaa\nbbbbbbbbbbbbbb"