Permutations—回溯法求解

原创 2015年11月19日 15:35:15

  题目详细信息请参考我之前写的方法Permutations

分析
  让每个元素都能成为某种排序的第一个元素。

C++代码

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void permutation(vector<int> &num, int begin, vector<vector<int> > &ans);

vector<vector<int> > permute(vector<int> &num) {
    vector<vector<int> > ans;
    permutation(num, 0, ans);
    return ans;
}

void permutation(vector<int> &num, int begin, vector<vector<int> > &ans) {
    if (begin >= num.size()) {
        ans.push_back(num);
        return;
    }
    // every number chosen to be the begin once
    for (int i = begin; i < num.size(); ++i) {
        swap(num[begin], num[i]);
        permutation(num, begin+1, ans);
        swap(num[begin], num[i]);
    }
}

int main() {
    int a[] = {1,2,4,6};
    vector<int> nums(a,a+4);

    vector<vector<int> > res = permute(nums);
    cout<<"["<<endl;
    for(int i=0;i<res.size();i++) {
        cout<<" [";
        for(int j=0;j<res[i].size();j++) {
            cout<<" "<<res[i][j];
        }
        cout<<" ]"<<endl;
    }
    cout<<"]"<<endl;
    return 0;
}

总结
  运行结果如下:

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。如果转载一定要通知博主哦~~

相关文章推荐

leetcode 46. Permutations-全排列|回溯|递归|非递归

原题链接:46. Permutations 【思路-Java、Python】递归实现 全排列是将一组数按一定顺序进行排列,如果这组数有n个,那么全排列数为n!个。现以{1, 2, 3, 4, 5}为例...

回溯法解决排列组合问题

package 算法和数据结构; /** * Filename : Backtracking.java * Author : zhihao_tian@126.com * Creation time :...

LeetCode总结,回溯法小结

一,回溯法思想 回溯法概念       回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。    回溯法...

[LeetCode]Permutations(回溯&&DFS&&递归!!!!)

题目意思很直白,求出不重复的所有排列,这里的是数字,对于字符串同样适用。 思路一:递归,每次都按照nums的顺序访问并且加入当前的vector,再递归的下一层。如果当前层的vector的大小==nu...

n后问题————回溯法求解(递归与非递归)

N后问题要求在一个n*n格的棋盘上放置n个皇后,使得他们彼此不受攻击。按照国际象棋的规则,一个皇后可以攻击与之处在同一行或同一列或同一斜线上的其他任何棋子。因此,n后问题等价于要求在一个n*n的棋盘上...

用回溯法求解0—1背包问题,并输出问题的最优解

问题:给定n种物品和一背包。物品i的重量是Wi,其价值为Vi,背包的容量是c,问应如何选择装入背包中的物品,使得装入背包中物品的总价值最大。 0—1背包问题是一个子集选取问题,适合于用子集树表示0—...

高斯—赛德尔迭代法求解方程组

  • 2015年09月29日 21:32
  • 223KB
  • 下载

POJ2369————Permutations(置换群,数论)

Permutations Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3094   A...

分别用雅可比(Jacobi)迭代法和高斯—塞德尔(Gauss—Seidel)迭代法求解线性方程组

算法介绍(迭代法介绍): 代码C语言实现; # include # include # define N 6 /* *使用雅可比迭代法和高斯-赛德尔迭代法 求解线性方程组 ...

leetcode 47. Permutations II-排列|回溯算法

原题链接:47. Permutations II 【思路1-Java】 这题是leetcode 46. Permutations-全排列|回溯|递归|非递归思路1延伸,每次交换 nums 中的两个...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Permutations—回溯法求解
举报原因:
原因补充:

(最多只允许输入30个字)