一、算法分析
首先题目说若在10步之内有解就输出步数,十步之内无解就是NO ANSWER,这就说明了搜索的深度不会超过十步,可以考虑用迭代搜索。迭代深搜基本框架和数据的读入写好之后,就是处理细节了,刚开始打算用链表做,结果自不常用链表,一直写错,后来发现可以用string类里面的find函数和replace函数来解决题目中的替换问题,find函数的作用是在a串中找到b串第一次出现的地方,用法a.find(b) 。而replace可以将a串从第m位开始的len个字符替换成b串,用法a.replace(m,len,b)。然后就高高兴兴打出了代码,结果交上去只有80分,最后一个点WA。(没有进行任何剪枝操作,题目时限比较宽裕,居然没有一个点TLE)。先贴上80分代码。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
string st1;
string st2;
const int maxn=15;
int ok=0;
struct method{
string s1;
string s2;
}p[maxn];
string ss1,ss2;
int cnt;
int d; //迭代加深的深度
void dfs(int cur,string st){
if(cur>d) return; //因为dfs是同层同步的,所以只要有一个触底就全部触底,那么就说明d深度内无法找到答案
for(int i=1;i<=cnt;i++){
//尝试每种操作
string ss=st;
int m=ss