枚举:全排列

*/-->

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

pre.src {background-color: Black; color: White;}

枚举:全排列

递归回溯实现的全排列:

// CreateTime: 2015-04-07 23:26:57

#include <iostream>

using namespace std;

int a[10];
int v[10];

void dfs(int n) {
    if (n == 10) {
        for (int i = 1; i <= 9; i++) {
            cout << a[i];
        }
        cout << endl;
        return;
    }
    for (int i = 1; i <= 9; i++) {
        if (!v[i]) {
            v[i] = 1;
            a[n] = i;
            dfs(n+1);
            v[i] = 0;
        }
    }
}

int main(void) {
    dfs(1);

    return 0;
}

algorithm库函数自带的全排列, next_permutation

// CreateTime: 2015-04-07 23:32:24

#include <iostream>
#include <algorithm>

using namespace std;

int a[10];
int main(void) {
    for (int i = 0; i <= 9; i++) {
        a[i] = i+1;
    }

    do {
        for (int i = 0; i <= 2; i++) {
            cout << a[i];
        }
        cout << endl;
    } while (next_permutation(a, a+3));

    return 0;
}

algorithm库函数自带的全排列, prev_permutation

// CreateTime: 2015-04-07 23:32:24

#include <iostream>
#include <algorithm>

using namespace std;

int a[10];
int cmp(int a, int b) { return a > b; }

int main(void) {
    for (int i = 0; i <= 9; i++) {
        a[i] = i+1;
    }

    sort(a, a+9, cmp);
    do {
        for (int i = 0; i <= 2; i++) {
            cout << a[i];
        }
        cout << endl;
    } while (prev_permutation(a, a+3));

    return 0;
}
时间: 2024-08-08 13:50:40

枚举:全排列的相关文章

uv216 暴力枚举全排列

数据范围较小,暴力枚举全排列就行 // // main.cpp // uva216 // // Created by Fangpin on 15/3/8. // Copyright (c) 2015年 FangPin. All rights reserved. // #include <iostream> #include <algorithm> #include <cstring> #include <cmath> #include <vector&

UVa140 Bandwidth 小剪枝+双射小技巧+枚举全排列+字符串的小处理

给出一个图,找出其中的最小带宽的排列.具体要求见传送门:UVa140 这题有些小技巧可以简化代码的编写. 本题的实现参考了刘汝佳老师的源码,的确给了我许多启发,感谢刘老师. 思路: 建立双射关系:从字符A到字符Z遍历输入的字符串,用strchr函数将输入中出现的字符找出,并将找出的字符进行编号,用letter和id分别存储字符和对应的编号 降维:输入中给出的,是类似于邻接表形式的二维形式,如果我们用二维数据结构,将增加处理时对于输出细节的处理难度,用 2个 vector将输出降低到1维,简化了计

枚举全排列的方法

若多个数值不等,则可以直接通过递归进行枚举,从左到右考虑每个数在当前前缀中是否使用过,使用过的话就跳过,没使用过就放入前缀进行下一次递归 #include<bits/stdc++.h> using namespace std; const int maxN=10000; int N; vector<int> all; vector<int> premutation; bool vis[maxN]; void printPremutation(){ if(premutat

枚举有重复元素的排列的两种方法

我们假设A数组是方案数组,P数组是模板数组. 对于每一种方案,从第一个位置开始放元素,一个一个放. 我们原有的打印全排列的方法是不允许A数组中出现重复元素的,如下代码所示: void dfs(int dp) { if(dp>n) { for(int i=1;i<=n;i++) cout<<a[i]<<" "; ans++; cout<<endl; return; } for(int i=1;i<=n;i++) { if(!vis[i

洛谷 P2647 最大收益

P2647 最大收益 题目描述 现在你面前有n个物品,编号分别为1,2,3,……,n.你可以在这当中任意选择任意多个物品.其中第i个物品有两个属性Wi和Ri,当你选择了第i个物品后,你就可以获得Wi的收益:但是,你选择该物品以后选择的所有物品的收益都会减少Ri.现在请你求出,该选择哪些物品,并且该以什么样的顺序选取这些物品,才能使得自己获得的收益最大. 注意,收益的减少是会叠加的.比如,你选择了第i个物品,那么你就会获得了Wi的收益:然后你又选择了第j个物品,你又获得了Wj-Ri收益:之后你又选

2017Summmer_上海金马五校 F题,G题,I题,K题

以下题目均自己搜 F题  A序列 一开始真的没懂题目什么意思,还以为是要连续的子串,结果发现时序列,简直智障,知道题意之后,好久没搞LIS,有点忘了,复习一波以后,直接双向LIS,处理处两个数组L和R,然后对整个数组扫一遍对于每一个下标取m=min(L[i],R[i]);用ans取2*m-1中的最大值.LIS用nlogn的算法实现,二分用的是lower_bound(),直接看代码. //Author: xiaowuga #include <bits/stdc++.h> #define maxx

noip 虫食算 (搜索)

描述 所谓虫食算,就是原先的算式中有一部分被虫子啃掉了,需要我们根据剩下的数字来判定被啃掉的字母.来看一个简单的例子:43#9865#045+ 8468#6633= 44445506678其中#号代表被虫子啃掉的数字.根据算式,我们很容易判断:第一行的两个数字分别是5和3,第二行的数字是5. 现在,我们对问题做两个限制:首先,我们只考虑加法的虫食算.这里的加法是N进制加法,算式中三个数都有N位,允许有前导的0. 其次,虫子把所有的数都啃光了,我们只知道哪些数字是相同的,我们将相同的数字用相同的字

50道hdu基础搜索总结(转)

Dfs: 大部分是直接递归枚举,即求满足约束条件下的解,虽不用剪枝,但也需要代码能力. 练习递归枚举的题目: 1241       Oil Deposits (dfs的连通块个数) 1016       Prime Ring Problem 1584       蜘蛛牌(简单dfs,简单的剪枝,还有人用DP做(???)) 1426       Sudoku Killer(练习递归的好题目 or Dancing links(???)) 2510       符号三角形(打表题,写写打表程序还是不错

UVa 140 带宽

题意:参考之前讲回溯法的最后一个问题. 思路:枚举全排列,考察每一种排列下的结果.  也可以进行剪枝优化,也是参见之前讲回溯法的部分. 这里我是用二维数组g来存边关系,但顶点还是单独保存在一个数组里,然后排序,然后求排列. 这题居然交了9次,1CE1TLE1AC6WA,CE的原因是没有包含cstring,在本地没包含可以...TLE原因是没有注释掉freopen.WA的原因之前一直以为是输出有问题,因为找了很多数据都通过了,以及题目说最多8个结点,但是图还是要开26X26啊...一次一次修改,虽

夏令营讲课内容整理 Day 6 Part 1.

Day6讲了三个大部分的内容. 1.STL 2.初等数论 3.倍增 Part1主要与STL有关. 1.概述 STL的英文全名叫Standard Template Library,翻译成中文就叫标准模板库. 它有点类似于一个大型的工具箱,里面包含许多实用工具,可以拿过来直接用而大部分情况下无需去深入探究其内部原理. 不知道从什么时候开始,CCF不再限制选手使用STL,所以在OI赛事中STL被广泛应用. 它分为六个大部分: 1)容器 containers 2)迭代器 iterators 3)空间配置