全排列1-3 5种不同写法

#include<iostream>
using namespace std;

const int N = 3;
int cnt = 0, a[20];
int to[20];

void f1()
{
  for(int i = 1; i <= N; i++)
    for(int j = 1; j <= N; j++)
      for(int k = 1; k <= N; k++)
      {
        if(i == j || j == k || i == k) continue;
        cout << i << " " << j << " " << k << "\n";
        cnt++;
      }
  cout << cnt << "\n";
}

void f2()
{
  for(int i = 1; i <= N; i++)
    for(int j = 1; j <= N; j++)
    {
      if(i == j) continue;
      for(int k = 1; k <= N; k++)
      {
        if(i == j || j == k || i == k) continue;
        cout << i << " " << j << " " << k << "\n";
        cnt++;
      }
    }
  cout << cnt << "\n";
}

void f3()
{
  for(int i = 1; i <= N; i++)
  {
    to[i] = 1;
    for(int j = 1; j <= N; j++)
    {
      if(to[j]) continue;
      to[j] = 1;
      for(int k = 1; k <= N; k++)
      {
        if(to[k]) continue;
        cout << i << " " << j << " " << k << "\n";
        cnt++;
      }
      to[j] = 0;
    }
    to[i] = 0;
  }
  cout << cnt << "\n";
}

void search_1(int t)
{
  if(t > N)
  {
    for(int i = 1; i < N; i++)
      cout << a[i] << " ";
    cout << a[N] << "\n";
    cnt++;
    return;
  }
  for(int i = 1; i <= N; i++)
  {
    if(to[i]) continue;
    a[t] = i;
    to[i] = 1;
    t++;
    search_1(t);
    to[i] = 0;
    t--;
  }
}

void f4()
{
  //cnt = 0;
  search_1(1);
  cout << cnt << "\n";
}

void f5()
{
  int t = 1;
  while(true)
  {
    if(t == 0) break;
    if(t > N)
    {
      for(int i = 1; i < N; i++)
        cout << a[i] << " ";
      cout << a[N] << "\n";
      cnt++;
      t--;
      to[a[t]] = 0;
    }
    int i;
    for(i = a[t] + 1; i <= N; i++)
    {
      if(to[i] == 1) continue;
      a[t] = i;
      to[i] = 1;
      t++;
      break;
    }
    if(i > N)
    {
      a[t] = 0;
      t--;
      to[a[t]] = 0;
    }
  }
  cout << cnt << "\n";
}

int main()
{
  //f1();//普通枚举
  //f2();//普通剪枝枚举
  //f3();//桶数组剪枝枚举
  //f4();//递归实现搜索
  //f5();//枚举实现搜索
  return 0;
}

n与m的全排列

#include<iostream>
using namespace std;

int n, m, cnt = 0;
int a[25];
bool to[25];
void search(int t)
{
  if(t > m)
  {
    for(int i = 1; i <= m; i++)
      cout << a[i] << " ";
    cout << "\n";
    cnt++;
    return;
  }
  for(int i = 1; i <= n; i++)
  {
    if(to[i]) continue;
    a[t] = i;
    to[i] = 1;
    search(t + 1);
    to[i] = 0;
    a[t] = 0;
  }
}
int main()
{
  cin >> n >> m;
  search(1);
  cout << cnt;
  return 0;
}