#include <iostream>
using namespace std;
int n,L,cnt=0;
string s ="";
bool check(char c) //判断在 s后面加 c能否构成困难的串
{
int cnt1 = 1;
for(int i = s.length()-1;i>=0;i-=2) //反复向前挪
{
string s1 = s.substr(i,cnt1);
string s2 = s.substr(i+cnt1);
s2.push_back(c);
if(s1 == s2)
return false;
cnt1++;
}
return true;
}
void dfs(int k)
{
if(cnt==n)
{
cout<<s<<endl;
exit(0); //就可以退出了
}
for(char i='A'; i<'A'+L; i++)
{
if( check(i) )
{
cnt++;
s.push_back(i);
dfs(k+1);
s.pop_back(); //回溯,一般用不到,结果可能性太多了
}
}
}
int main()
{
cin >> L >> n;
dfs(0);
return 0;
}
dfs困难的串——算法笔记
最新推荐文章于 2021-10-21 10:09:07 发布