1. 程式人生 > >窮舉所有排列

窮舉所有排列

時限:100ms 記憶體限制:10000K  總時限:300ms

描述

輸入一個小於10的正整數n,按把每個元素都交換到最前面一次的方法,輸出前n個小寫字母的所有排列。

輸入

輸入一個小於10的正整數n。

輸出

按把每個元素都交換到最前面一次的方法,輸出前n個小寫字母的所有排列。

輸入樣例

3

輸出樣例

abc
acb
bac
bca
cba
cab

#include <iostream>
#include <stdio.h>
using namespace std;

int n;
char a[10] = {'a','b','c','d','e','f','g','h','i','j'};

void swap(int x,int y)
{
	int tmp;
	tmp = a[x];
	a[x] = a[y];
	a[y] = tmp;
}

void search(int k)
{
	int i;
	if(k == n)
	{
		for(i = 0;i < n;i++)
		{
			cout << a[i];
		}
		cout << endl;
	}
	else
	{
		for(i = k;i < n;i++)
		{
			swap(i,k);
			search(k+1);
			swap(i,k);
		}
	}
}

int main()
{
	cin >> n;
	search(0);
	return 0;
}
 

       

也是非常典型的回溯演算法