c_cpp 排列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 排列相关的知识,希望对你有一定的参考价值。

// $ g++ dfs.cpp --std=c++11
#include <iostream>
#include <vector>

template<class T>
void ShowResult(std::vector<T>& result)
{
  for (unsigned int i = 0 ; i < result.size() ; ++i) {
    std::cout << result[i] << " ";
  }
  std::cout << std::endl;
}

// Get all the permutations from 0 to max
void permute(unsigned int index, unsigned int max)
{
  static std::vector<unsigned int> result(max);
  static std::vector<bool> used(max);

  if (index >= max) {
    ShowResult(result);
    return;
  }

  for (unsigned int i = 0 ; i < max ; ++i) {
    if (!used[i]) {
      used[i] = true;
      result[index] = i;
      permute(index + 1, max);
      used[i] = false;
    }
  }
}

// Get all the permutations of the elements in the data
template<class T>
void permute(unsigned int index, std::vector<T>& data)
{
  static std::vector<T> result(data.size());
  static std::vector<bool> used(data.size());

  if (index >= data.size()) {
    ShowResult(result);
    return;
  }

  for (unsigned int i = 0 ; i < data.size() ; ++i) {
    if (!used[i]) {
      used[i] = true;
      result[index] = data[i];
      permute(index + 1, data);
      used[i] = false;
    }
  }
}

int main()
{
  permute(0, 4);

  std::vector<char> v = { 'a', 'b', 'c', 'd' }; // c++ 11 style to initialize vector.
  permute(0, v);

  return 0;
}

以上是关于c_cpp 排列的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 784.信件排列

c_cpp 具有重复的排列

c_cpp 全排列实现

c_cpp 排列

c_cpp 【递归法】排列问题【2-4】

c_cpp 给定字符串的排列