问题标题: 酷町堂:1050 😀错了

0
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
我要回答