关于dfs的套用法则

看了好几篇文章,总结一下dfs如何套用的
是这里插入图片描述例如:蓝桥杯第六届C语言中牌型种数来说:小明被劫持到X赌城,被迫与其他3人玩牌。 一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。 这时,小明脑子里突然冒出一个问题:
如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?
先分析一下13个牌,每张牌有0,1,2,3,4种可能;总合要在13张
要想把所有的情况都罗列出来必须
*必须分层考虑,所谓分层也就是把每一种牌都看成一层,一种牌存在的可能条件下去分析另外一种牌的所有可能
所以他的层次也就是牌的总类也就是点数。
他的判断边界是总牌数大于13,或者牌的点数大于14;
看一下代码

#include<stdio.h>
int sum=0,ans=0;    //ans为最终的结果,sum为牌的总数
void fun(int n){
	if(sum>13||n>14)return;    //条件边界
	if(n==14){                             //最后一层下判断一下是否符合要求
		if(sum==13)ans++;     //如果符合要求ans++;
	}else{
		for(int i=0;i<5;i++)   / /每一层中的可能为0,1,2,3,4
			   {
		sum+=i;                     // 改变条件
		fun(n+1);                    //递归到下一层
		sum-=i;}                   //返回到初始层数时再回溯原来的条件
	}
}
int main(){
	fun(1);
	printf("%d",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43232423/article/details/88591983
今日推荐