DFS基本模型(啊哈算法)

本文介绍了一个使用C++实现的递归算法,该算法用于解决全排列问题。通过递归的方式,程序能够找到所有可能的排列组合,并打印出来。文章中的代码详细展示了如何通过递归函数dfs来实现对n个不同元素的所有可能排列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream> 
using namespace std;

int a[10], book[10], n;
void dfs(int step)   ///step表示站在第几个盒子前面
{
	if (step == n + 1)    //站在第n+1个盒子前面,表示前n个盒子已经放好位置
	{
		//输出一种排列(1~n号盒子中扑克的编号)
		for (int i = 1; i <= n; i++)
			cout << a[i];
		cout << endl;
		return;   //返回之前的一步(最近一次调用dfs的地方)
	}
	//此时站在第step个盒子前面
	for (int i = 1; i <= n; i++)
	{
		if (book[i]==0)    //0表示第i号扑克在手上
		{
			a[step] = i;   ///将第i号扑克放在第step个盒子
			book[i] = 1;   //1表示扑克已不在手上

			//第step个盒子已经放好,走到了第step+1个盒子面前
			dfs(step + 1);    //递归实现
			book[i] = 0;     //将尝试的扑克拿回来,才能继续下一次尝试

		}
	}
	return;

}
int main()
{
	cout << "输入1~9之间的整数:";
	cin >> n;
	dfs(1);
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值