目的

  1. 刷完100AC (最近很不舒服,写博客耗时啊
  2. 记录第一个字符串的题目

参考

https://www.luogu.org/blog/user20197/solution-p1032

代码

#include<cstdio>
#include<map>
#include<queue>
#include<string>
#include<iostream>
#define MAX 20+9
using namespace std; struct node{
string s;
int dis;
}; string original[MAX];
string translate[MAX];
int n;
map <string, int> m;//判重
string x,y;
int ans; string trans(const string &str, int i, int j)//在str的第i个位置使用第j种手法改变
{
string ans = "";
if(i+original[j].length() > str.length() ) return ans;//???有必要? for(int k = 0; k < original[j].length() ; k++)
if(str[i+k] != original[j][k]) return ans;//判断是否可以变换 ans = str.substr(0, i);//逐个拼接
ans += translate[j];
//ans += str.substr(i+original[j].length());
ans += str.substr(i+original[j].length() , str.length() );
return ans;
} void bfs() {
queue <node> q;
node str;
str.s = x;
str.dis = 0;
q.push(str); while(!q.empty() ) {
node u = q.front() ;
q.pop() ;
if(m[u.s ]) continue; if(u.s == y) {
ans = u.dis ;
break ;
}
m[u.s ] = 1; string tmp;
for(int i = 0; i < u.s.length() ; i++) {
for(int j = 0; j < n; j++) {
tmp = trans(u.s , i, j);
if(tmp != "") {
node e;
e.s = tmp;
e.dis = u.dis +1;
q.push(e);
}
}
}
}
if (ans > 10 || ans == 0)// 不懂这题目,为啥0步不行
cout << "NO ANSWER!" << endl;
else
cout << ans << endl;
} int main() {
cin>>x>>y;
while(cin>>original[n]>>translate[n]) n++;
bfs();
return 0;
}

[luogu普及] ---P1032 字串变换的更多相关文章

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

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

  2. luogu P1032 字串变换

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

  3. 洛谷 P1032 字串变换题解

    题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1​ ->B_1B1​ A ...

  4. 洛谷 P1032 字串变换

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

  5. P1032 字串变换 字符串BFS

    题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1​ ->B_1B1​ A_2A2​ -> B_2B2​ 规则的含义为:在 AA中的子串 A_1A1​ ...

  6. [洛谷P1032] 字串变换

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

  7. 【搜索】P1032 字串变换

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

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

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

  9. 洛谷 P1032 字串变换 (BFS)

    题目传送门 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出 STL大法好 这题最麻烦的其实是处理字符串,真正的搜索部分我个人认为也就只有橙题或黄题的难度.而处理字符串,正如前面所说,STL ...

随机推荐

  1. IE浏览器发展史

  2. 安卓手机USB无法共享、上网或卡顿的解决方法

    安卓手机通过USB为电脑(Windows10)提供网络接入点时,系统程序会异常卡顿. 1)设备管理器2)点击“网络适配器”,在弹出的下拉列表中选择”Remote NDIS based Internet ...

  3. VHDL之std_logic_1164

    This packages defines a standard for designers to use in describing the interconnection data types u ...

  4. 学习廖雪峰的Python教程之数据类型

    数据类型 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同的数据,需要定 ...

  5. error C3859: 超过了PCH的虚拟内存范围;请使用“-Zm33”或更大的命令行选项重新编译

    编译 ORB_SLAM的Release版本时,出现了此问题: 错误 2 error C3859: 超过了 PCH 的虚拟内存范围;请使用"-Zm465"或更大的命令行 修改方法: ...

  6. SLAM: 图像角点检测的Fast算法(时间阈值实验)

    作为角点检测的一种快速方法,FastCornerDetect算法比Harris方法.SIft方法都要快一些,应用于实时性要求较高的场合,可以直接应用于SLAM的随机匹配过程.算法来源于2006年的Ed ...

  7. 使用OpenCV画折线图

    使用OpenCV画直方图是一件轻松的事情,画折线图就没有那么Easy了,还是使用一个库吧: GraphUtils 源代码添加入工程 原文链接:http://www.360doc.com/content ...

  8. 使用 C# 进行 HTTP 操作

    说明 主要使用到了 Newtonsoft.Json 和 System.Net 两个命名空间. Program.cs static void Main(string[] args) { WebOpert ...

  9. 读书笔记「Python编程:从入门到实践」_7.用户输入和while循环

    7.1 函数input()的工作原理 函数input() 让程序暂停运行,等待用户输入一些文本.获取用户输入后,Python将其存储在一个变量中,以方便你使用. message = input(&qu ...

  10. LINUX - .so 与 .a

    .a gcc -c test1.c test2.c(或者g++ -c test1.cpp test2.cpp  )---   .o ar -r libtest.a test1.o test2.o    ...