首页 > 代码库 > uva129 - Krypton Factor 7.4.3 困难的串
uva129 - Krypton Factor 7.4.3 困难的串
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;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。