全排列函数C++实现

例题:求由123456789构成的所有九位数字

1 用C++的next_permutation函数

#include <iostream>
#include <stdio.h>
#include <algorithm>
int main(){
    int a[9] = {1,2,3,4,5,6,7,8,9};
        while(next_permutation(a, a+9)){
            for(int i =0;i<9;i++)
                cout<<a[i];
            cout<<endl;
        }
    return 0;
}    

注意:

  1 要添加头文件#include <algorithm>

  2 输出的所有数组,并不包含初始数组,即123456789

2 利用dfs思想实现

#include <iostream>
using namespace std;
int t[10];
bool vist[10];void dfs(int start){
    if(start == 10){      //输出数组
    }else{
        for(int i=1;i<10;i++){
            if(vist[i] == 0){
                t[start] = i;
                vist[i] = 1;
                dfs(start+1);
                vist[i] = 0;
            }
        }
    }
}
int main(){
    int a[9] = {1,2,3,4,5,6,7,8,9};
    for(int i=1;i<10;i++)
        vist[i] = 0;
    dfs(1);return 0;
}

原文地址:https://www.cnblogs.com/woxiaosade/p/10320277.html

时间: 2024-10-15 21:01:48

全排列函数C++实现的相关文章

C++ STL 全排列函数详解

一.概念 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列.当m=n时所有的排列情况叫全排列.如果这组数有n个,那么全排列数为n!个. 比如a,b,c的全排列一共有3!= 6 种 分别是{a, b, c}.{a, c, b}.{b, a, c}.{b, c, a}.{c, a, b}.{c, b, a}. 二.常用操作 1.头文件 #include <algorithm> 2.使用方法 这里先说两个概念:"下一个排列组合&qu

C++ 全排列函数 nyoj 366

C++ STL中提供了std::next_permutation与std::prev_permutation可以获取数字或者是字符的全排列,其中std::next_permutation提供升序.std::prev_permutation提供降序. 1.std::next_permutation函数原型 template <class BidirectionalIterator> bool next_permutation (BidirectionalIterator first, Bidir

【转】next_permutation和prev_permutation(STL库中的全排列函数)用法

这是一个求一个排序的下一个排列的函数,可以遍历全排列,要包含头文件<algorithm> 下面是以前的笔记    与之完全相反的函数还有prev_permutation,查询当前排序上一个字典序.   返回为bool型,若返回true则成功生成,返回false则失败,还原到升序或降序的排列,与sort连用风味更佳   (1) int 类型的next_permutation   int main() {  int a[3]; a[0]=1;a[1]=2;a[2]=3;  do { cout<

next_permutation( ) 和prev_permutation( ) 全排列函数

头文件#include <algorithm> 两者都是用来计算排列组合的函数.前者是求出下一个排列组合,而后者是求出上一个排列组合. 所谓"下一个"和"上一个",有一个例子; 对序列 {a, b, c}, a > b >c,它的下一个序列即为{a, c, b},而{a, c, b}的上一个序列即为{a, b, c},同理可以推出所有的六个序列为:{a, b, c}.{a, c, b}.{b, a, c}.{b, c, a}.{c, a, b

HDU 1027 Ignatius and the Princess II[DFS/全排列函数next_permutation]

Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 9458    Accepted Submission(s): 5532 Problem Description Now our hero finds the door to the BEelzebub feng5166. He op

STL之全排列函数poj1716

#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; int main(){ //freopen("input.txt","r",stdin); int a[5],tag=0; while(scanf("%d%d%d%d",&a[0],&a[1],&

C++全排列函数

#include<algorithm> #include<iostream> using namespace std; #include<algorithm> int main() { int a[3]={1,2,3}; do { int i; for(i=0;i<3;i++) { cout<<a[i]; } cout<<endl; }while(next_permutation(a,a+3)); return 0; } 原文地址:http

hdu 1027 Ignatius and the Princess II (STL 全排列)

题目链接今天学了 全排列函数 之后,再回过头来看这一题,发现这时对于这样的题 就是一个字 秒 .主要函数有两个 next_permutation 和 prev_permutation这两个一个是向后找 一个是向前找,next的是往后,prev的是向前找.有的人可能不太明白我这里只的向前和向后的意思. 向前 就是 往 字典序小 的 方向 找 ,反之 就是向前. 举个例子把 :假设数组a[n],i<=m,next_permutation(a+i,a+m)就表示对a[i]到a[m]进行操作,每操作一次

全排列(递归与非递归实现)

全排列问题在公司笔试的时候很常见,这里介绍其递归与非递归实现. 递归算法 1.算法简述 简单地说:就是第一个数分别以后面的数进行交换 E.g:E = (a , b , c),则 prem(E)= a.perm(b,c)+ b.perm(a,c)+ c.perm(a,b) 然后a.perm(b,c)= ab.perm(c)+ ac.perm(b)= abc + acb.依次递归进行. void swap(string &pszStr,int k,int m) { if(k==m) return ;