现在的位置: 首页 > 综合 > 正文

汉诺塔的题…

2018年01月19日 ⁄ 综合 ⁄ 共 394字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.