烤鸡(记录搜索过程)

在这里插入图片描述
在这里插入图片描述
思路:用DFS解决,注意这种记录过程的搜索,用一个一维数组来记录一次完整的搜索,达到要求就把这个过程存放到二维数组中去

#include<cstdio>
int n;
int flag[11];
int a[10001][11];
int ans;
void dfs(int k,int sum){
	if(k>10){
		if(sum==n){
			ans++;//统计方案总数 
			for(int i=1;i<=10;i++){
				a[ans][i]=flag[i];//这种方案可以就放入数组中存下来 
			}
		}
		return;
	}
	if(sum>n)return;//如果超出了要求,就直接忽略 
	for(int i=1;i<=3;i++){//任意选一种做下一种调料 
		flag[k]=i;//将使用的调料记录下来 
		dfs(k+1,sum+i);//查看下一种调料 
		flag[k]=0;//回溯 
	}
}
int main(){
	scanf("%d",&n);
	dfs(1,0);//从第一种调料开始尝试,美味程度为0 
	printf("%d\n",ans);
	for(int i=1;i<=ans;i++){
		for(int j=1;j<=10;j++){
			printf("%d ",a[i][j]);
		}
		printf("\n");
	}
	return 0;
} 
发布了160 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Anterior_condyle/article/details/105275788