博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用程序实现全排列(二)
阅读量:6296 次
发布时间:2019-06-22

本文共 1115 字,大约阅读时间需要 3 分钟。

反思:

1.Q:next_permutation如何处理有重复串的情况?

   A:上述函数实现的原理仍然适用:

对于{1,1,1,1,1},由于找不到一个正序对,所以next_permutation返回false;

2.Q:是否有求出前一个排列的函数?

   A:prev_permutation

参数,返回值,实现原理等类似

(二)自己写一个交换的程序

代码如下:

#include
#include
#include
#include
#include
#include
using namespace std;void exchange(int*,int,int);int cnt = 0;int main(){ int Array[5] = {1,2,3,4,5}; int subarray[5]; memset(subarray,0,sizeof(subarray)); /* for(int i = 0; i < 5; ++i) { printf("%d\t",Array[i]); }*/ printf("\n"); exchange(Array,5,0); cout << cnt << endl; return 0;}void exchange(int*a,int len,int index){ if(index == len) { ++cnt; for(int i = 0; i < len; ++i) { printf("%d\t",a[i]); } printf("\n"); } for(int i = index; i < len; ++i) { int tmp = a[i]; a[i] = a[index]; a[index] = tmp; exchange(a,len,index+1); tmp = a[i]; a[i] = a[index]; a[index] = tmp; }}

  但这种交换的方法不能保证按字典序递增输出全排列,同时也不能处理有重复字符串的情况

fringe benefit:学会了打数学符号:用软件盘:)

以及手写的三行交换居然写错了= =,看来STL或封装还是很有必要的,否则在大程序里这么小的bug貌似影响会很大又很难找到错误

转载于:https://www.cnblogs.com/warmfrog/p/3645745.html

你可能感兴趣的文章
java5线程池
查看>>
性能监控-Top
查看>>
request.getParameterMap()的坑
查看>>
三种提取 网卡的方法
查看>>
岗位角×××感管理
查看>>
5款常见原型工具,产品特色知多少?
查看>>
我的友情链接
查看>>
ASP.NET 大文件下载的实现思路及代码
查看>>
win2008 域服务器搭建教程
查看>>
不用Office自动化技术,给Word文档中填充赋值
查看>>
演示:IPv6全球单播地址的配置
查看>>
JS字符串的下划线命名和驼峰命名转换
查看>>
我的友情链接
查看>>
我的第一篇博文
查看>>
网络命令
查看>>
Oracle数据库的基本语法
查看>>
为什么淘宝、天猫和旺信的 App 不整合成一个?
查看>>
nginx 访问控制 防盗链
查看>>
eclipse配置maven插件
查看>>
Hessian RPC示例和基于Http请求的Hessian序列化对象传输
查看>>