让我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; }