搜索。深搜学习。深度优先搜索之数字全排列。nyoj,组合数

本文探讨了使用深度优先搜索算法实现1-9数字的全排列问题,并提及了组合数在解决此类问题中的应用,参考了《啊哈,算法》一书。
摘要由CSDN通过智能技术生成

深度优先搜索之1-9中的数字全排列

输入

输出 
123
132
213
231
312
321
#include<stdio.h>
int a[10],book[10],n;/*C语言的全局变量在没有赋值以前默认为0,因此这里的book数组不用全部再次赋初始值0*/ 
void dfs(int step)//step表示要排列的位置 
{
	int i;
	if(step==n+1)//如果要排列第n+1个位置,那么表示前n个盒子已经放好数字 
	{
		//输出一种排列(第1-n位置上的数字的序号) 
		for(int i=1; i<=n; i++)
			printf("%d",a[i]);
		printf("\n");
		
		return ;//返回之前的一步(最后一次调用电dfs的地方) 
	}
	
	//按照1.2.3...n的顺序一一尝试应该放放入数字 
	for(int i=1; i<=n; i++)
	{
		//判断要排列的数字是否已经排好了 
		if(book[i] == 0)//标记,等于0的时候表示没有排好 
		{
			//开始尝试排列数字i 
			a[step] = i;//将第i个数字放入到底step位置上 
			book[i] = 1;//book[i]等于1,表示排好了 
			//第step位置已经排好,然后排第i+1个位置 
			dfs(step+1);//通过函数的递归调用实现 
			book[i] = 0;//将刚才尝试的数字收回,才能进行下一次尝试 
		}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值