采用深度优先搜索进行扑克牌的排序

 #include<iostream>
using namespace std;
int count=0; 
int book[5];
char card[5][2]={'2','C','A','D','A','C','J','C','J','H'};
char a[5][2];
void dfs(int step){
    if(step==5){
            count++;
            return ;
    }
    for(int i=0;i<5;i++){
        if(/*a[step][0]!=a[step-1][0]&&*/book[i]==0){//判断条件该牌未被标记且与上一张的牌号不相同,但我不知道应该如何写出这条判断语句,如果我将其注释掉,则输出120,是一个全排列。如果不注释,则输出为0.
            a[step][0]=card[i][0];
            book[i]=1;//将用过的牌标记
            dfs(step+1);
            book[i]=0;//取消标记
        }
    } 
    return ;
}
int main(){
    dfs(0);
    cout<<count<<endl;
    return 0;
}

图片说明
图片说明
我未按照题目要求,只是给出了特定的扑克牌进行算法可行性的验证,如第三组数据所示,该程序应输出48.
现在的问题是不知如何进行条件的判断。悉心向各位请教

你就全排列出所有的组合模式,另外添加一个函数 bool isDifferenSequence(char compsite[][]),每种组合放进去判断一下,不是很简单么。
bool isDifferentSequence(char seq[][])
{
for(int i = 0;i<4;i++)
{
if (seq[i][0] == seq[i+1][0])
return false;
}
return true;
}

另外你自己的代码,step明明是从0开始计数的,下标似乎有-1了吧?不会报错么?