0
已解决
刘乐宸
新手天翼
新手天翼
#include<algorithm>
#include<iostream>
#include<string>
#include<cstdio>
#include<cmath>
using namespace std;
int n,cnt;
char a[10001];
void dfs(int t)
{
if(t==n+1){
for(int i=1;i<=n;i++)
cout<<a[i]<<" ";
cout<<endl;
cnt++;
return ;
}
for(int i='A';i<='C';i++)
if(t<4||i!=a[t-2]||a[t-1]!=a[t-3]){
a[t]=i;
dfs(t+1);
}
}
int main(){
cin>>n;
dfs(1);
cout<<cnt;
return 0;
}
错了,为啥输出的是全排列
刘乐宸在2020-05-01 15:48:00追加了内容
20分。。。🤬
😊(迷之微笑)🙃
1
已采纳
王子健
初级天翼
初级天翼
这道题目其实就是一道变形的填数问题,用char数组存储
你的代码主函数没有问题,你的深搜里面有问题
1.19行的if不需要,先直接填,在输出的时候再做判断
2.写一个f函数,判断子序列有没有相同的,有就返回false,没有就返回true:
3.在要输出序列的时候呢,t==n+1下面加一个判断:if(f()),然后在这个判断里面写输出和计数,因为只要满足了f函数的条件才能输出,然后在if(f())下面写return
应该没错了,你试试看,还有错发错误代码我帮你看
0
0
0