码迷,mamicode.com
首页 > 其他好文 > 详细

UVA-129 Krypton Factor(回溯)

时间:2015-09-28 16:01:22      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

题目大意:由字母A到Z组成的字符串,其中有两个子串完全相同的叫做容易的串,反之叫困难的串。找出由前L个字母组成的第n个困难的串。

题目分析:简单回溯,不过要判断是否存在重复子串比较棘手。《入门经典》上借鉴八皇后问题,只判断添进字符后是否存在连续子串。具体做法是这样的,以长度为对象枚举以新添进字符为尾巴的子串,看是否重复。

 

代码如下:

# include<iostream>
# include<cstdio>
# include<cstring>
# include<algorithm>
using namespace std;

int n,k,cnt,path[1000];

void dfs(int cur)
{
    if(cur>81)
        return ;
    if(cnt++==n){
        for(int i=0;i<cur;++i){
            printf("%c",char(path[i]+‘A‘));
            if(i%4==3&&i!=cur-1){
                if(i%64==63)
                    printf("\n");
                else
                    printf(" ");
            }
        }
        printf("\n%d\n",cur);
        return ;
    }
    for(int i=0;i<k;++i){
        path[cur]=i;
        int flag=1;
        for(int j=1;j*2<=cur+1;++j){
            int ok=1;
            for(int l=0;l<j;++l)
                if(path[cur-l]!=path[cur-l-j]){
                    ok=0;
                    break;
                }
            if(ok){
                flag=0;
                break;
            }
        }
        if(flag)
            dfs(cur+1);
        if(cnt>n)
            return ;
    }
}

int main()
{
    while(scanf("%d%d",&n,&k)&&(n+k))
    {
        cnt=0;
        dfs(0);
    }
    return 0;
}

  

UVA-129 Krypton Factor(回溯)

标签:

原文地址:http://www.cnblogs.com/20143605--pcx/p/4844179.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!