#include <stdio.h> #include <stack> #include <string.h> using namespace std; int L,n,cnt; int s[1010]; int dfs(int cur) { if(cnt++==n) { for(int i=0;i<cur;i++) printf("%c",'A'+s[i]); printf("\n"); return 0; } for(int i=0;i<L;i++) { s[cur] = i; int ok = 1; for(int j=1;j*2<=cur+1;j++) { int equal = 1; for(int k=0;k<j;k++) { if(s[cur-k]!=s[cur-k-j]) { equal = 0; break; } } if(equal) {ok=0;break;} } if(ok) if(!dfs(cur+1)) return 0; } return 1; } int main() { while(scanf("%d %d",&n,&L)!=EOF) { memset(s,0,sizeof(s)); cnt = 0; dfs(1); } return 0; }
uva 129 困难串
因为在递归的过程中,总是选择最小的i,所以最先求到的解肯定是字典序最小的,我觉得这也是这道题用这个算法的原因,因为我觉得这个算法对减时没有什么卵用
猜你喜欢
转载自weiqingliu.iteye.com/blog/2284785
今日推荐
周排行