全排列

问题

给定{1,2,…, n}的一个全排列,按照字典序列出从该排列开始的所有排列。

输入

  • 第一行是一个正整数n(≤ 9),表示全排列是{1,2,…, n}的全排列
  • 第二行是一个全排列

输出

按照格式要求输出该排列开始的所有排列

输入样例

3
231

输出样例

231
312
321

全排列方法一

#include <iostream>
using namespace std;
 
void swap(char &string1,char &string2) 
{
	char temp = string1;
	string1 = string2;
	string2 = temp;
}
 
int fun(char* string,int length)
{
	bool flag = 0;
	int part1,part2;
	//从右开始,找出第一个比右边数字小的 x 
	for(int i=length-1;i>0;i--)
	{
		if(string[i-1] < string[i])
		{
			flag = 1;
			part1 = i-1;
			break;			
		}
	}
	if(flag == 0)
		return 1;
		//寻找右侧比x大的最小数字 
	int min = string[part1+1];
	part2 = part1+1;	
	for(int i=length-1;i>part1;i--)
	{
		if(string[i] < min && string[i] > string[part1])
		{
			min = string[i];
			part2 = i;
		}	
	}
	// 交换两数字 
//	cout<<part1<<" "<<part2<<endl;
	swap(string[part1],string[part2]);
	//倒转x右侧所有数字 
	for(int i=length -1,j= part1+1;i>j;)
	{
		swap(string[i],string[j]);
		i--;
		j++;
	}
	cout<<string<<endl;
	return 0;
}
 
int main()
{
	char str[9] = {0};
	int length = 0;
	scanf("%d",&length);
	scanf("%s",str);
	cout<<str<<endl;
	while(!fun(str,length))
	{
		
	}
}

posted on 2020-06-28 18:18  玻璃晴朗诶  阅读(150)  评论(0编辑  收藏  举报