枚举排列的两种常见方法

1、递归枚举

 1 #include<iostream>
 2 using namespace std;
 3
 4 void print_permutation(int n, int *p, int cur)
 5 {
 6     if (cur == n)
 7     {
 8         for (int i = 0; i < n; i++)
 9             cout << p[i];
10         cout << endl;
11     }
12     else for (int i = 1; i <= n; i++)
13     {
14         int ok = 1;
15         for (int j = 0; j < cur; j++)
16         if (p[j] == i)  ok = 0;
17         if (ok)
18         {
19             p[cur] = i;
20             print_permutation(n, p, cur + 1);
21         }
22     }
23 }
24 int _tmain(int argc, _TCHAR* argv[])
25 {
26     int n,p[10000],cur=0;
27     cin >> n;
28     print_permutation(n, p, cur);
29     return 0;
30 }

2、STL——next_permutation

 1 #include<iostream>
 2 #include<algorithm>
 3 using namespace std;
 4
 5 int _tmain(int argc, _TCHAR* argv[])
 6 {
 7     int n, p[10];
 8     cin >> n;
 9     for (int i = 0; i < n; i++)
10         cin >> p[i];
11     sort(p, p + n);
12     do{
13         for (int i = 0; i < n; i++)
14             cout << p[i];
15         cout << endl;
16     } while (next_permutation(p, p + n));
17     return 0;
18 }
时间: 2024-10-12 16:32:50

枚举排列的两种常见方法的相关文章

内存数据持久化的两种常见方法

内存数据持久化的两种常见方法: 1.将内存数据定期dump到磁盘 优点:效率高,操作简便 缺点:会损失部分数据 2.利用类似于mysql的binlog日志的方式,记录更新操作,需要时回放数据 优点:可保证数据完整性 缺点:会损失部分性能,实现稍微复杂点 redis实现了这两种方式

vue中this.$router.push()路由传值和获取的两种常见方法

1.路由传值   this.$router.push() (1) 想要导航到不同的URL,使用router.push()方法,这个方法会向history栈添加一个新纪录,所以,当用户点击浏览器后退按钮时,会回到之前的URL (2)当点击 <router-link> 时,这个方法会在内部调用,即点击 <router-link :to="..."> 等同于调用 router.push(...) a)      声明式:<router-link :to=&quo

藏文件的两种常见方法(隐写术)

1.利用ADS::$DATA(windows文件流绕过)也就是利用了NTFS交换数据流(ADS),ADS是NTFS磁盘格式的一个特性,在NTFS文件系统下,每个文件都可以存在多个数据流.通俗的理解就是其它文件可以“寄宿”在某个文件身上,而在资源管理器中却只能看到宿主文件,找不到寄宿文件.::DATA就是默认不修改文件流.利用windows特性,可在后缀名中加‘::DATA绕过. 可以用NTFS磁盘格式的这个特性试着隐藏自己的文件. 先打开当前文件夹的cmd,这里我在桌面上新建了个文件夹 打开该文

jdbc至sql server的两种常见方法

Statement和prepareStatement sql server中已建立BookPhone数据库,包含bookPhone表,eclipse中有BookPhone类,三个string类型的值 1. import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLExcepti

html笔记04:在html之中导入css两种常见方法

1.导入式: <html> <head> <title></title> <style type="text/css"> @import url("style.css"); </style> </head> </html> 2.连接式: <html> <head> <title></title> <link rel=&

基于Apache+Tomcat负载均衡的两种实现方法

Apache+Tomcat实现负载均衡的两种实现方法 如果我们将工作在不同平台的apache能够实现彼此间的高效通信,因此它需要一种底层机制来实现--叫做apr Apr的主要目的就是为了其能够让apache工作在不同的平台上,但在linux上安装apache的时候通常都是默认安装的 [[email protected] ~]#rpm -qi aprName                 :apr                                        Relocation

移动站Web开发图片自适应两种常见情况解决方案

本文主要说的是Web中图片根据手机屏幕大小自适应居中显示,图片自适应两种常见情况解决方案.开始吧 在做配合手机客户端的Web wap页面时,发现文章对图片显示的需求有两种特别重要的情况,一是对于图集,这种文章只需要左右滑动浏览,最好的体验是让图片缩放显示在屏幕有效范围内,防止图片太大导致用户需要滑动手指移动图片来查看这种费力气的事情,用户体验大大降低.二是图文混排的文章,图片最大宽度不超过屏幕宽度,高度可以auto.这两种情况在项目中很常见.另外,有人说做个图片切割工具,把图片尺寸比例都设定为统

性能测试的几种常见方法

性能测试的几种常见方法(转) 负载测试:负载测试是用户观点的测试行为.简单说来就是负载测试就是让系统在一定得负载压力下进行正常的工作,观察系统的表现能否满足用户的需求. 用户的需求从何而来?需求分析--特指性能测试的需求分析.由此看来需求分析是相当重要的. 负载测试是站在用户的角度去观察在一定条件下软件系统的性能表现. 负载测试的预期结果是用户的性能需求得到满足.此指标一般体现为响应时间.交易容量.并发容量.资源使用率等. 负载测试也是最常用的性能测试方法,因此也有不少人将负载测试混淆为性能测试

如何将word转换成pdf的两种便捷方法

为了让文件有更好的阅读效果并且保证在任何操作平台上都可以使用,很多时候我们需要将各种格式的文件转换成pdf格式的文件,其中最常见的可能就是word文档转换成pdf格式文件了.那么,如何将word转换成pdf呢?小猪猪现在为大家介绍两种常见的转换方法,需要的大家可以选择合适的使用. 一.使用word等office软件直接转换    这种方法优点很明显,可以不用下载第三方软件,操作比较简单.但是限制性比较大,需要是合适的格式且不能批量转换.小猪猪以word文档为例向大家介绍具体操作方法. word文