#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了吧?不会报错么?