全排列(深度优先算法)

输入: a  b  c

输出:--------------



#include <vector>
#include <iostream>
#include <sstream>
#include <algorithm>
#include <string>
using namespace std;
//全排列
struct node{
	node(char c){ch =c;}
	char ch ;
	bool flag = false ;
};

vector<node> nodes;
string str;
int num = 0 ;
void quanpailie(){
	if(all_of(nodes.begin(),nodes.end(),[](const node&p){return p.flag;})){
		cout<<str<<"------"<<num<<endl;
		return ;
	}
	for(int i=0;i<nodes.size();i++){
		if(nodes[i].flag==false){
			nodes[i].flag = true;
			str += nodes[i].ch ;

			quanpailie(); //递归

			nodes[i].flag = false; //回溯
			str.pop_back();
		}
	}
}
int main() {
	string line ;
	getline(cin,line);
	stringstream strm(line) ;
	char ch;
	while(strm>>ch)
		nodes.push_back(node(ch));
	quanpailie();

	return 0;
}

 

### 使用深度优先搜索(DFS)算法生成全排列 为了理解如何使用深度优先搜索来生成全排列,可以先了解该方法的核心原理。深度优先搜索是一种用于遍历或搜索树或图的算法,沿着树的深度遍历节点,尽可能深地搜索分支[^3]。 对于全排列问题而言,可以通过构建一棵决策树来进行求解,在每一步选择一个未使用的元素加入当前序列,并继续递归处理剩余部分直至完成全部选择。当达到叶子节点时,则获得了一个完整的排列方案;之后应回溯至上一状态并尝试其他可能性,确保每个位置上的候选都能得到充分探索[^4]。 下面是一个具体的Python实现例子: ```python def dfs_permutations(nums, path, result): if not nums: result.append(path) return for i in range(len(nums)): # 选择当前数作为下一个字符 current_num = nums[i] # 剩余可用的选择 remaining_nums = nums[:i] + nums[i+1:] # 继续向下一层递归调用 dfs_permutations(remaining_nums, path + [current_num], result) def get_all_permutations(nums): result = [] # 开始执行dfs函数 dfs_permutations(nums, [], result) return result if __name__ == "__main__": test_case = [1, 2, 3] all_perms = get_all_permutations(test_case) print(all_perms) ``` 此代码片段展示了通过DFS方式获取给定列表`nums`内所有不同顺序组合的方法。每次迭代过程中都会选取一个新的数字添加至现有路径中形成新的子集,同时移除已选中的数值以便后续操作能够基于剩下的选项展开进一步计算。最终结果保存在一个名为`result`的结果集中返回给用户查看。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值