#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int MAX = 50;
int tot = 0;
int x[MAX];
int n, k;
bool ok()
{
int i, j;
for(i=1; i<=n-k; i++) //考察每k个连续的01串
{
for(j=i; j<k; j++)
if(x[j] != x[j+1])
break;
if(j == k) //存在连续的k个相同子串
return false;
}
return true;
}
//由于对称性,只考虑0开头的情况,最后加倍
void backtrack(int dep)
{
if(dep > n)
{
if(ok())
tot += 2;
return;
}
for(int i=0; i<2; i++)
{
x[dep] = i;
backtrack(dep+1);
}
}
int main()
{
ifstream fin("离散01串.txt");
cout << "输人离散01串长度:";
fin >> n; cout << n << endl;
cout << "输入不包含连续相同子串长度:";
fin >> k; cout << k << endl;
memset(x, 0, sizeof(x));
x[1] = 0;
backtrack(2);
cout << "符号条件的01串个数为:" << tot;
cout << endl;
cout << endl;
fin.close();
return 0;
}
离散01串问题
最新推荐文章于 2021-04-10 10:22:28 发布