让我mark一下…… 每次递归都要纠结很久……
这是学长的代码,借过来领悟一下……
题目大意:给你汉诺塔中盘子的个数,然后给你一串字符,询问在最佳移动的过程中,是否存在所给的状态,如果是,则输出YES,否则,NO。
如CAB,就依次对应盘子的标号,盘子标号从上到下。
bool dfs(int s,int t,int m,int n){
if(n==-1) return true;
if(s==a[n]){
rt dfs(s,m,t,n-1);
}if(t==a[n]){
rt dfs(m,t,s,n-1);
}else return false;
return true;
}
int main(){
int n;
while(sf("%d",&n)!=EOF){
sf("%s",s);
REP0(i,n){
a[i] = s[i] -'A'+1;
}
if(dfs(1,2,3,n-1)) puts("YES");
else puts("NO");
}
rt 0;
}