标签:style blog color strong os name
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 困难的串,布布扣,bubuko.com
uva129 - Krypton Factor 7.4.3 困难的串
标签:style blog color strong os name
原文地址:http://www.cnblogs.com/cute/p/3794261.html