题目链接为:https://www.luogu.org/problemnew/show/P1032

思路:看到数据比较小,而且最多有6个规则,就可以用搜索去做了,我用的BFS,大体思路如下:

  1. 定义结构体表示状态,其中包括字符串str和当前步数num;并定义该结构体的队列;
  2. 用map实现string到int的映射,用来记录某个状态是否到达过,若到达过,标记为1,否则为0;
  3. 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)的更多相关文章

  1. 洛谷 P1032 字符变换

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

  2. NOIP2002字串变换[BFS]

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

  3. 字串变换 bfs + 字符串

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

  4. NOIP2002 字符变换

    啊本来以为2002的题应该会比较友善于是很naive地像模拟一样用着stl乱玩结果死也过不了最后一个点qaq 心情很悲痛于是为了解放自我 #include<iostream> #inclu ...

  5. luogu题解P1032字串变换--BFS+STL:string骚操作

    题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...

  6. python中实现打印特定字符变换

    首先需要将 lib文件 放在该文件同一目录 使用的时候,先导入 from lib.common import print_msg ,然后调用里面的 print_msg() 方法即可! lib文件地址: ...

  7. leetcode 学习心得 (1) (24~300)

    源代码地址:https://github.com/hopebo/hopelee 语言:C++ 24.Swap Nodes in Pairs Given a linked list, swap ever ...

  8. $NOIp$提高组历年题目复习

    写在前面 一个简略的\(NOIp\)题高组历年题目复习记录.大部分都有单独写题解,但懒得放\(link\)了\(QwQ\).对于想的时候兜了圈子的题打上\(*\). \(NOIp2018\ [4/6] ...

  9. 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) ...

随机推荐

  1. ThinkJava-复用类

    7 .2 继承语法 例子: package com.cy.reusing; import static com.java.util.Print.*; class Cleanser { private ...

  2. Amazon behavior question

    Amazon onsite behavior question[一亩三分地论坛面经版] - Powered by Discuz! http://www.1point3acres.com/bbs/thr ...

  3. 转化Excel表格为php配置文件

    <?php     //建立reader对象 ,分别用两个不同的类对象读取2007和2003版本的excel文件    require("PHPExcel/Reader/Excel20 ...

  4. ORA:01745 无效的主机 绑定变量名

    原因是:mybatis中的mapping映射时,sql语句中忘了加逗号,且逗号处有换行

  5. js实现复选框的全选和全不选

    <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content ...

  6. 最近学习下,nohup和&的区别

    nohup是永久执行 &是指在后台运行 运行 nohup --helpRun COMMAND, ignoring hangup signals. 可以看到是“运行命令,忽略挂起信号” 就是指, ...

  7. CUDA C Programming Guide 在线教程学习笔记 Part 1

    1. 简介 2. 编程模型 ▶ SM version 指的是硬件构架和特性,CUDA version 指的是软件平台版本. 3. 编程接口.参考 http://chenrudan.github.io/ ...

  8. 5. jdk路径配置

    path , classpath 的配置及作用? 1) PATH环境变量.作用是指定命令搜索路径,在i命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到 ...

  9. url参数带点

    今天在处理一些接口的时候,发现了一些神奇bug. url路径参数/binbin没有问题 但是/jay.chou 发现查不到正确数据了. 其实是spring没有配置好参数带点的情况. RequestMa ...

  10. FireFox 书签 缓存 路径设置

    English ver down https://www.mozilla.org/en-US/firefox/new/ add ons https://addons.mozilla.org/en-US ...