码迷,mamicode.com
首页 > 其他好文 > 详细

ybt 1199字母全排列

时间:2017-08-28 20:06:02      阅读:197      评论:0      收藏:0      [点我收藏+]

标签:算法 递归

全排列

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 151     通过数: 111 
【题目描述】
给定一个由不同的小写字母组成的字符串,输出这个字符串的所有全排列。
我们假设对于小写字母有‘a’ <‘b’ < ... <‘y’<‘z’,而且给定的字符串中的字母已经按照从小到大的顺序排列。

【输入】
只有一行,是一个由不同的小写字母组成的字符串,已知字符串的长度在1到6之间。
【输出】
输出这个字符串的所有排列方式,每行一个排列。要求字母序比较小的排列在前面。字母序如下定义:
已知S = s1s2...sk,T = t1t2...tk,则S<T等价于,存在p(1<=p<=k),使得s1=t1,s2=t2,...,sp-1=tp-1, sp<tp成立。

【输入样例】
abc
【输出样例】
abc
acb
bac
bca
cab
cba
【来源】

No
#include<iostream>#include<cstdio>
#include<cstring>
using namespace std;
char b[10000][8];int k;
void pai(char a[],int index,int num,int lenth )
{
	if(num==1)
	{
		k++;
		for(int i=0;i<lenth;i++)
		{
			b[k][i]=a[i];
		} 
		 return;
	}
	for(int i=0;i<num;i++)
	{
		swap(a[index+i],a[index]);
		pai(a,index+1,num-1,lenth);
		swap(a[index],a[index+i]);
	}
	return;}int main(){
	char a[10];
	scanf("%s",a);
	int l=strlen(a);
	pai(a,0,l,l);
	for(int i=k;i>0;i--)
	{
		for(int j=0;j<i;j++)
		{
			if(strcmp(b[i],b[j])<0)
			swap(b[i],b[j]);
		}
	}
	for(int i=1;i<=k;i++)
	{
		puts(b[i]);
	}
 }


ybt 1199字母全排列

标签:算法 递归

原文地址:http://20020603.blog.51cto.com/6918895/1959923

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!