首页
统计
留言
友链
更多
关于
推荐
B站主页
私有网盘
WP分站
ZBlog分站
聚合图床
企业邮箱
地大官网
Search
1
C++ 最大公约数函数__gcd()的用法及其朴素实现
586 阅读
2
一文弄懂搜索算法中的DFS和BFS
265 阅读
3
WordPress 博客主题推荐
187 阅读
4
C++ 中的各种进制转换函数汇总
155 阅读
5
C++ 中 using 的用法
152 阅读
笔记
教程
资源
网站
转载
登录
Search
标签搜索
C++
算法
网站
WordPress
资源
编程
全排列
进制转换
搜索
DFS
BFS
博客
STL
主题
张再筵
累计撰写
8
篇文章
累计收到
7
条评论
首页
栏目
笔记
教程
资源
网站
转载
页面
统计
留言
友链
关于
推荐
B站主页
私有网盘
WP分站
ZBlog分站
聚合图床
企业邮箱
地大官网
搜索到
1
篇与
的结果
2022-01-31
C++ 中全排列枚举的几种实现方式
1.DFS(使用递归与回溯实现)对于普通数组Array,这里给出函数模板形式:#include<bits/stdc++.h> using namespace std; template<class T> void func(T* arr, int total, int k = 0) //轮流更换第n位和n到total-1位 { for (int i = k; i < total; i++) { if (k == total - 1) //在此对排列好的数组进行下一步操作 { for (int p = 0; p < total; p++)cout << arr[p]; cout << "\n"; return; } {T t = arr[i]; arr[i] = arr[k]; arr[k] = t; }//swap(a[k],a[i]); func(arr, total, k + 1); {T t = arr[i]; arr[i] = arr[k]; arr[k] = t; } } } int main() { int arr[]{ 1,2,3,4,5 }; func(arr, 5); char crr[] = "ABCDEFG"; func(crr, 4); return 0; }对于字符串,则可跳过回溯步骤,相应地,空间复杂度将由O(1)提升至O( n! ),具体实现如下:#include<bits/stdc++.h> using namespace std; void f(string& str, int n = 0) { if (n == str.size() - 1)cout << str << endl; //在此对排列好的数组进行下一步操作 for (int i = n; i < str.size(); ++i) { string ts = str; auto t = ts[i]; ts[i] = ts[n]; ts[n] = t; f(ts, n + 1); } } int main() { return 0; string str = "1234567890"; f(str); return 0; }2.调用 algorithm.h 中的next_permutation ()函数伪代码如下:do { // todo } while (next_permutation(a, a + n));其中a为数组首地址,n为数组大小;对于string或vector,在参数中传入首末迭代器即可。
2022年01月31日
97 阅读
0 评论
0 点赞