文章

8

粉丝

14

获赞

1

访问

7.2k

头像
全排列 题解:
P1185 中国矿业大学/北京大学机考题
发布于2024年9月3日 19:27
阅读数 871

按照这个回溯法的模板来吧(DFS也是这个模板)
result = []
def backtrack(路径, 选择列表):
    if 满足结束条件:
        result.add(路径)
        return
    
    for 选择 in 选择列表:
        做选择
        backtrack(路径, 选择列表)
        撤销选择 

#include<bits/stdc++.h>
using namespace std;

vector<vector<char>> res;
int used[6];
vector<char> t;

void backTrace(string s) {
	if(t.size() == s.length()) {
		res.push_back(t);
		return;
	}
	
	for(int i = 0; i < s.size(); i++) {
		if(used[i] == 0) {
			t.push_back(s[i]);
			used[i] = 1;
			backTrace(s);
			t.pop_back();
			used[i] = 0;
		}
	}
}

int main()
{
	string s;
	cin >> s;
	
	backTrace(s);
	
	for(int i = 0; i < res.size(); i++) {
		auto vi = res[i];
		for(int i = 0; i < vi.size(); i++)
			cout << vi[i];
		cout << endl;
	}
	
	return 0;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发