• Uva129


    Krypton Factor UVA - 129

     1 #include <cstdio>
     2 #include <iostream>
     3 #include <queue>
     4 #include <vector>
     5 #include<string.h>
     6 #include<map>
     7 #include<bits/stdc++.h>
     8 #define LL long long
     9 #define maxn 1005
    10 using namespace std;
    11 int n,L,cnt;
    12 int s[100];
    13 void dfs(int cur)
    14 {
    15     if(cnt==n)
    16     {
    17         for(int i=0;i<cur;i++)
    18         {
    19             if(i%64==0&&i>0)printf("
    ");
    20             else if(i%4==0&&i>0)printf(" ");
    21             printf("%c",'A'+s[i]);
    22         }
    23         printf("
    %d
    ",cur);
    24         return;
    25     }
    26     for(int i=0;i<L;i++)
    27     {
    28         int ok=1;
    29         s[cur]=i;
    30         for(int j=1;2*j<=cur+1;j++)
    31         {
    32             int equals=1;
    33             for(int k=0;k<j;k++)
    34             {
    35                 if(s[cur-k]!=s[cur-k-j])
    36                 {
    37                     equals=0;break;
    38                 }
    39             }
    40             if(equals)
    41             {
    42                 ok=0;break;
    43             }
    44         }
    45         if(ok){
    46            cnt++;
    47            dfs(cur+1);
    48         }
    49     }
    50 }
    51 int main()
    52 {
    53     while(scanf("%d %d",&n,&L)==2,n)
    54     {
    55         cnt=0;
    56         dfs(0);
    57     }
    58     return 0;
    59 }

    思路:

    利用回溯法,深度优先搜索每个串的下一个字符。对于搜索到的字符看它是否合法,不用再看之前搜索到的字符是否合法,因为不合法的情况已经被剪枝掉了。需要检查的最大的串长为本串的一半长度(2*j<=cur+1)。

    注意点:

    1.对于输出的时候,有一个数字转字符串的过程。printf("%c",'A'+s[i]);

  • 相关阅读:
    Lua C Api
    Lua string.gsub (s, pattern, repl [, n])
    LearnOpenGL 你好,三角形[转]--附源码
    学习OpenGL简单易懂网站
    泰文排版规则
    Lua截取utf-8编码的中英文混合字符串
    字符编码
    使用Ant编译提示Class not found: javac1.8
    MySQL索引
    转 linux 权限
  • 原文地址:https://www.cnblogs.com/zuiaimiusi/p/10888204.html
Copyright © 2020-2023  润新知