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;
}

总结
  运行结果如下:

这里写图片描述

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

相关文章推荐

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

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

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

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 中的两个...

0/1背包问题-----回溯法求解

问题描述 有n个物品和一个容量为c的背包,从n个物品中选取装包的物品。物品i的重量为w[i],价值为p[i]。一个可行的背包装载是指,装包的物品总重量不超过背包的重量。一个最佳背包装载是指,物品总价...

回溯法求解0 1背包的优化

优化方法:  剪枝一:可以进行剪枝,因为很多情况是没有意义的,当重量大于背包容量的时候,没有必要对剩下的物品再来决策了。  剪枝二:将剩下的所有物品都选取其总价值也没有目前已经求得的方案的价值还大...

回溯法——求解0-1背包问题

以前研究过一个简单的N皇后问题,对回溯法也有了个模糊的认识,大致理解就是:先一直做某件事,当完成某个条件时或者是触犯某个条件时,再返回到最近的一个类似还原点的地方。        在用回溯法求解0...

回溯法解决N皇后问题——递归与非递归求解

回溯法其实也是一种搜索算法,它可以方便的搜索解空间。  回溯法解题通常可以从以下三步入手:  1、针对问题,定义解空间  2、确定易于搜索的解空间结构  3、以深度优先的方式搜索解空间,并在搜...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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