问题描述
- 采用深度优先搜索进行扑克牌的排序
-
#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了吧?不会报错么?
时间: 2024-10-04 20:07:27