【CodeVS 1099 字串变换】

题目描述 Description

已知有两个字串 A$, B$ 及一组字串变换的规则(至多6个规则):
A1$ -> B1$
A2$ -> B2$
规则的含义为:在 A$中的子串 A1$ 可以变换为 B1$、A2$ 可以变换为 B2$ …。
例如:A$=’abcd’ B$=’xyz’
变换规则为:
‘abc’->‘xu’ ‘ud’->‘y’ ‘y’->‘yz’

则此时,A$ 可以经过一系列的变换变为 B$,其变换的过程为:
‘abcd’->‘xud’->‘xy’->‘xyz’

共进行了三次变换,使得 A$ 变换为B$。

输入描述 Input Description

输入格式如下:

A$ B$
A1$ B1$ \
A2$ B2$  |-> 变换规则
… … /
所有字符串长度的上限为 20。

输出描述 Output Description

若在 10 步(包含 10步)以内能将 A$ 变换为 B$ ,则输出最少的变换步数;否则输出”NO ANSWER!”

样例输入 Sample Input

abcd xyz
abc xu
ud y
y yz

样例输出 Sample Output

3

稍微高级一点的BFS,即双向BFS,用C++的string类型存储,替换真是太方便了,string.replace(i,j,s)表示把从i开始的j个字符替换为字符串s,string.find(s,npos)表示从npos开始的第一次找到串s的位置,如果找不到返回值string::npos 双向搜索的时候注意并不是两边速度一样的,所以tmp和retmp数组不能清空,但是入队要从上次的tail开始,这样可以保证交叉的一瞬间找出来最优解。

好吧今天真是被string玩坏了Orz

下面是代码:

 

stdKonjac

stdKonjac

一只挣扎的蒟蒻ACMer

评论太激烈有些评论需要亲动动手指翻页

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

*