7-5 困難的串
阿新 • • 發佈:2019-02-03
%d style can 直接 utc 困難 namespace 退出 scanf
回溯法
註意return的用法 找到結果了就直接退出dfs
還有就是數組下標的處理要註意
#include<bits/stdc++.h> using namespace std; int n,l; int cnt; int ans[1000]; int dfs(int cur) { if(cnt++==n) { for(int i=0;i<cur;i++) { if(i%4==0&&i>0) { if(i%64==0) cout<<endl; else printf(" "); } putchar(‘A‘+ans[i]); } printf("\n%d\n",cur); return 0; } for(int i=0;i<l;i++) { ans[cur]=i; int ok=1; for(int j=1;j*2<=cur+1;j++) {int equa=1; for(int k=0;k<j;k++) { if(ans[ cur-k ]!=ans[ cur-j-k ] ){ equa=0;break; } } if(equa){ok=0;break;} } if(ok) if(!dfs(cur+1))return 0;//用return 0來結束回溯 } return 1; } int main() { while(scanf("%d%d",&n,&l)==2&&n&&l) { cnt=0; dfs(0); } }
7-5 困難的串