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\n", 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\n", 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('\n');
else
putchar(' ');
}
putchar(v[i]);
}
printf("\n%d\n", cur+1);
}
int dfs(int cur)
{
//printf("cur: %d\n", 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\n", 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;
}

uva129 - Krypton Factor 7.4.3 困难的串的更多相关文章

  1. UVA129 Krypton Factor 困难的串 dfs回溯【DFS】

     Krypton Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  2. UVA129 —— Krypton Factor (氪因素)

    Input and Output In order to provide the Quiz Master with a potentially unlimited source of question ...

  3. 129 - Krypton Factor

    /*UVa129 - Krypton Factor --回溯问题.看例子可知道确定该字符串是按照从左到右依次考虑每个位置,当前位置填不上所有的字符时,需要回溯. -- */ #define _CRT_ ...

  4. Krypton Factor 困难的串-Uva 129(回溯)

    原题:https://uva.onlinejudge.org/external/1/129.pdf 按照字典顺序生成第n个“困难的串” “困难的串”指的是形如ABAB, ABCABC, CDFGZEF ...

  5. UVA - 129 Krypton Factor (困难的串)(回溯法)

    题意:求由字母表前L个字母组成的字典序第n小的困难串.(如果一个字符串包含两个相邻的重复子串,则称它是"容易的串",其他串称为"困难的串".) 分析:回溯时,检 ...

  6. Krypton Factor

    Krypton Factor Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)To ...

  7. UVA.129 Krypton Factor (搜索+暴力)

    UVA.129 Krypton Factor (搜索+暴力) 题意分析 搜索的策略是:优先找长串,若长串不合法,则回溯,继续找到合法串,直到找到所求合法串的编号,输出即可. 注意的地方就是合法串的判断 ...

  8. Uva 129 Krypton Factor

    0.这道题的输出 处理起来挺麻烦的 以后类似的可以借鉴一下 ;i<cur;i++) { && i%==) printf("\n%c",a[i]); & ...

  9. UVa 129 Krypton Factor【回溯】

    学习的紫书的回溯,理解起来还是好困难的说啊= = #include<iostream> #include<cstdio> #include<cstring> #in ...

随机推荐

  1. XSS 前端防火墙(2):可疑模块拦截

    由于是在前端防护,策略配置都能在源代码里找到,因此很快就能试出破解方案.并且攻击者可以屏蔽日志接口,在自己电脑上永不发出报警信息,保证测试时不会被发现. 昨天提到最简单并且最常见的 XSS 代码,就是 ...

  2. db file sequential read (数据文件顺序读取)

    转载:http://www.dbtan.com/2010/04/db-file-sequential-read.html db file sequential read (数据文件顺序读取): db ...

  3. JavaScript基础知识整理(1)数组

    第一:创建. 1,var arr= new Array(); //数组为空.长度为0. arr[0]="apple"; arr[1]="orange"; arr ...

  4. STL源码分析读书笔记--第5章--关联式容器

    1.关联式容器的概念 上一篇文章讲序列式容器,序列式容器的概念与关联式容器相对,不提供按序索引.它分为set和map两大类,这两大类各自有各自的衍生体multiset和multimap,的底层机制都是 ...

  5. Yii1 控制前端载入文件

    Yii::app()->clientScript->registerCssFile(CSS_URL.'reset.css'); Yii::app()->clientScript-&g ...

  6. about云资源共享

      Nosql资源: http://www.aboutyun.com/thread-5655-1-1.html (1)redis安置(2)RedisAdminUI.zip(3)redis安装部署(4) ...

  7. ZOJ-3201 Tree of Tree 树形DP

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3201 题意:给一颗树,每个节点有一个权值,求节点数为n的最大权子 ...

  8. 轻松学习Linux之入门篇

    1.Linux概述: 2.Linux优点 3.linux历史待上传 4.linux部分发行版 5.linux政府扶持 本文出自 "李晨光原创技术博客" 博客,谢绝转载!

  9. ubuntu 14.04 root破解

    Advanced Programmable interrupt controller 高级可编程中断控制;Advanced create table `users` (`id` int(11) not ...

  10. 第一百九十二天 how can I 坚持

    早上去中关村森林公园跑了会步,下午看了部电影<夏洛特烦恼>,感觉电影跟我看的那部小说差不多,还是挺不错的. 睡觉.