zoukankan      html  css  js  c++  java
  • uva129

     

    7.4.3困难的串

    学习点:dfs加入返回值,递归搜索过程中如果有一个成功,就直接退出

    //7.4.3 困难的串
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    int n,L;
    int cnt;
    char v[81];
    
    bool judge(int cur)
    {
        for(int i=1;i<=(cur+1)/2;i++)//判断长度为2*i的后缀是否有相同的
        {
            bool equal=1;
            for(int j=0;j<i;j++)
                if(v[cur-i-j]!=v[cur-j])  
                {
                    equal=0;
                    break;
                }
            if(equal)
                return false;
        }
        return true;
    }
    
    int dfs(int cur)
    {
        //printf("cur: %d
    ", cur);
        for(int i=0;i<L;i++)
        {
            v[cur]='A'+i;
            if(judge(cur))
            {
                cnt++;
                if(cnt==n)
                {
                    v[cur+1]=0;
                    printf("%s
    ", v);
                    return 1;
                }
                if(dfs(cur+1))
                    return 1;
            }
        }
        return 0;
    }
    
    int main()
    {
        while(cin>>n>>L)
        {
            cnt=0;
            dfs(0);    
        }
        return 0;
    }

    修改一下输出格式即可解决uva129

    //7.4.3 困难的串
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    int n,L;
    int cnt;
    char v[81];
    
    bool judge(int cur)
    {
        for(int i=1;i<=(cur+1)/2;i++)//判断长度为2*i的后缀是否有相同的
        {
            bool equal=1;
            for(int j=0;j<i;j++)
                if(v[cur-i-j]!=v[cur-j])  
                {
                    equal=0;
                    break;
                }
            if(equal)
                return false;
        }
        return true;
    }
    
    void output(int cur)
    {
        for(int i=0;i<=cur;i++)
        {
            if(i%4==0 && i>0)
            {
                if(i%64==0 && i>0)
                    putchar('
    ');
                else
                    putchar(' ');
            }
            putchar(v[i]);
        }
        printf("
    %d
    ", cur+1);
    }
    int dfs(int cur)
    {
        //printf("cur: %d
    ", cur);
        for(int i=0;i<L;i++)
        {
            v[cur]='A'+i;
            if(judge(cur))
            {
                cnt++;
                if(cnt==n)
                {
                    v[cur+1]=0;
                    //printf("%s
    ", v);
                    output(cur);
                    return 1;
                }
                if(dfs(cur+1))
                    return 1;
            }
        }
        return 0;
    }
    
    int main()
    {
        while(cin>>n>>L && n && L)
        {
            cnt=0;
            dfs(0);    
        }
        return 0;
    }
  • 相关阅读:
    【PowerDesigner】【2】将工具栏显示出来
    【PowerDesigner】【1】简单介绍
    【服务器】【Windows】【4】删除Windows系统中不想要的服务
    【Java】【8】StringUtils中isNotEmpty和isNotBlank的区别
    【Java】【7】枚举类
    hdu 1285
    Codeforces Round #198 (Div. 2) —— D
    Codeforces Round #198 (Div. 2) —— C
    Codeforces Round #198 (Div. 2) —— B
    Codeforces Round #198 (Div. 2) —— A
  • 原文地址:https://www.cnblogs.com/cute/p/3794261.html
Copyright © 2011-2022 走看看