洛谷P1032 字串变换【bfs】
题目链接:https://www.luogu.org/problemnew/show/P1032
题意:
给定一个原字符串和目标字符串,以及几个字符串变换的规则。
问能否根据这几个规则在十步之内把原字符串变为目标字符串。
思路:
bfs,队列维护字符串和所经过的步骤这样一个二元组而不是简单的字符串。
每一次取出一个字符串,用所给的规则进行变换得到新的字符串。
由于字符串中可能有多次匹配,所以用vector存每一次匹配的开始位置,这些都是独立的一次变换都要单独存入vector中。【这一点最开始没有考虑到,图方便用了.find()】
#include<stdio.h>
#include<stdlib.h>
#include<map>
#include<set>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue> using namespace std; string A, B;
struct rule{
string a, b;
}rules[];
struct node{
string s;
int steps;
node(){}
node(string _s, int _steps){
s = _s;
steps = _steps;
}
};
set<string>sset; int main()
{
cin>>A>>B;
int n = ;
while(cin>>rules[n].a>>rules[n].b)n++; queue<node>que;
que.push(node(A, ));
int steps = ;
bool flag = false;
while(!que.empty()){
node now = que.front();que.pop();
//cout<<now.s<<" "<<now.steps<<endl;
if(now.s == B){
flag = true;
steps = now.steps;
break;
}
if(now.steps == )continue;
for(int i = ; i < n; i++){
//cout<<i<<endl;
vector<int>pos;
//cout<<rules[i].a.length()<<endl;
//cout<<now.s.length()<<endl;
//cout<<now.s.length() - rules[i].a.length()<<endl;
for(int j = ; j < now.s.length(); j++){
bool f = true;
for(int k = ; k < rules[i].a.length(); k++){
if(j + k >= now.s.length()){
f = false;
break;
}
if(now.s[j + k] != rules[i].a[k]){
f = false;
break;
}
}
if(f)pos.push_back(j);
} //cout<<pos.size()<<endl;
for(int x = ; x < pos.size(); x++){
int p = pos[x];
char t[];
int j;
for(j = ; j < p; j++){
t[j] = now.s[j];
//cout<<t[j];
}
for(int k = ; k < rules[i].b.length(); k++, j++)
{
t[j] = rules[i].b[k];
}
for(int k = p + rules[i].a.length(); k < now.s.length(); k++, j++){
t[j] = now.s[k];
}
t[j] = '\0'; if(sset.find(t) == sset.end()){
que.push(node(t, now.steps + ));
sset.insert(t);
}
}
}
}
if(flag){
printf("%d\n", steps);
}
else{
printf("NO ANSWER!\n");
}
return ;
}
---恢复内容结束---
洛谷P1032 字串变换【bfs】的更多相关文章
- [洛谷P1032] 字串变换
洛谷题目链接:字串变换 题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B ...
- 洛谷 P1032 字串变换题解
题目链接:https://www.luogu.org/problem/P1032 题目描述 已知有两个字串A,BA,B及一组字串变换的规则(至多66个规则): A_1A1 ->B_1B1 A ...
- 洛谷 P1032 字串变换
题目描述 已知有两个字串 A, B 及一组字串变换的规则(至多6个规则): A1 -> B1 A2 -> B2 规则的含义为:在 A$中的子串 A1 可以变换为 B1.A2 可以变换为 B ...
- 洛谷 P1032 字串变换 (BFS)
题目传送门 我即使是死了,钉在棺材里了,也要在墓里,用这腐朽的声带喊出 STL大法好 这题最麻烦的其实是处理字符串,真正的搜索部分我个人认为也就只有橙题或黄题的难度.而处理字符串,正如前面所说,STL ...
- 洛谷 P1032 字串变换 题解
每日一题 day19 打卡 Analysis 广搜+map判重 用find寻找字串,再用replace替换字串 这里的map相当于正常广搜的一个book的作用 #include<iostream ...
- 洛谷 P1032 字串变换(map)
题目传送门 解题思路: 搜索题,因为要求最少次数,用bfs. AC代码: #include<cstdio> #include<iostream> #include<cst ...
- 集训作业 洛谷P1032 字串变换
集训的题目有点多,先写困难的绿题吧(简单的应该想想就会了) 嗯,这个题看起来像个搜索呢(就是个搜索) 我们仔细想想就知道这个题肯定不能用深搜,可以优化的地方太少了,TLE是必然的. 那我们该怎么办呢? ...
- 洛谷P1032 字串变换-题解
https://www.luogu.org/problemnew/show/P1032--(题目传送) 好在数据范围很小,暴力一点也能过.思路较简单,按照所有规则,从第一位开始广搜. 注意:1.str ...
- luogu题解P1032字串变换--BFS+STL:string骚操作
题目链接 https://www.luogu.org/problemnew/show/P1032 分析 这题本来很裸的一个BFS,发现其中的字符串操作好烦啊.然后就翻大佬题解发现用STL中的strin ...
随机推荐
- stingray中使用angularjs
引入angularjs 手动启用angularjs 不使用ng-app, 在所有模块和controller定义后挂载启用angularjs function OnLoad() { scroll(0, ...
- OpenCV 学习笔记 04 深度估计与分割
本章节主要是使用深度摄像头的数据来识别前景区和背景区,这样就可以分别对前景和背景做不同的处理. 1 创建模块
- 记一次数据库参数compatible降级[转]
转:http://dbzone.iteye.com/blog/1042455 众所周知,Oracle参数compatible 主要用于启用Oracle针对某一版本的新特性.但此参数设置时,只能往上调, ...
- aaronyang的百度地图API之LBS云[把数据丰富显示1/3]
中国的IT 需要无私分享和贡献的人,一起努力 本篇博客来自地址:http://www.cnblogs.com/AaronYang/p/3673933.html,请支持原创,未经允许不许转载 一.第一步 ...
- 深入理解Fsync
1 介绍 数据库系统从诞生那天开始,就面对一个很棘手的问题,fsync的性能问题.组提交(group commit)就是为了解决fsync的问题.最近,遇到一个业务反映MySQL创建分区表很慢,仔细分 ...
- android开发(46) 使用 textview实现文字的阴影效果,浮雕效果
前言 最近看到一些文字的阴影效果很有意思,尝试了下,形成本文.“平面效果“是我们平时常见的平面的样子.“阴影效果”会给人一种凸起的感觉.浮雕效果会给一种雕刻“凹陷”的感觉. 演示效果图 方法 使用 t ...
- 3D 特征点概述(2)
还是紧接着上一文章的思路继续介绍3D特征点的基本概念问题,还是这个表格: Feature Name Supports Texture / Color Local / Global / Regional ...
- Java知多少(82)标签、按钮和按钮事件简介
标签和按钮也许是图形界面中最常见的两种组件,按钮又总是与激发动作事件有关. 标签 标签(JLabel)是最简单的Swing组件.标签对象的作用是对位于其后的界面组件作说明.可以设置标签的属性,即前景色 ...
- Python爬虫学习——使用selenium和phantomjs爬取js动态加载的网页
1.安装selenium pip install selenium Collecting selenium Downloading selenium-3.4.1-py2.py3-none-any.wh ...
- 8 -- 深入使用Spring -- 5...2 使用@Cacheable执行缓存
8.5.2 使用@Cacheable执行缓存 @Cacheable可用于修饰类或修饰方法,当使用@Cacheable修饰类时,用于告诉Spring在类级别上进行缓存 ------ 程序调用该类的实例的 ...