题目传送门:P1032 [NOIP2002 提高组] 字串变换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
题目背景
本题不保证存在靠谱的多项式复杂度的做法。测试数据非常的水,各种做法都可以通过,不代表算法正确。因此本题题目和数据仅供参考。
本题为搜索题,本题不接受 hack 数据。关于此类题目的详细内容
题目描述
已知有两个字串 A,B 及一组字串变换的规则(至多 6 个规则),形如:
- A1→B1。
- A2→B2。
规则的含义为:在 A中的子串 A1 可以变换为 B1,A2 可以变换为 B2⋯。
例如:A=abcd,B=xyz,
变换规则为:
- abc→xu,ud→yu,y→yz。
则此时,A 可以经过一系列的变换变为 B,其变换的过程为:
- abcd→xud→xy→xyz。
共进行了 3 次变换,使得 A 变换为 B。
输入格式
第一行有两个字符串 A,B。
接下来若干行,每行有两个字符串 Ai,Bi,表示一条变换规则。
输出格式
若在 10 步(包含 10步)以内能将 A 变换为 B,则输出最少的变换步数;否则输出 NO ANSWER!
。
输入输出样例
输入 #1
abcd xyz abc xu ud y y yz
输出 #1
3
说明/提示
对于 100% 数据,保证所有字符串长度的上限为 20。
【题目来源】
NOIP 2002 提高组第二题
整道题思路很简单
至多6个规则 和 若在10步(包含10步)以内
一般的,求解的个数用深搜,求最优解用广搜。
原因自己想 其实是广搜由于寻找顺序,导致找到一个解就一定是最优解了。
于是大框架是一个BFS,里面再去实现"取出队首元素,找字串,更改,放入队列" 这不摆明着是模式匹配吗
具体的讲解上代码(不要走,后面更精彩)
//P1032 字串变换
#include <iostream>
#include <cctype>
#include <cmath>
#include <ctime>
#include <climits>
#include <cstring>
#include <string>
#include <cstdio>
#include <cstdlib>
#inclu