zoukankan      html  css  js  c++  java
  • 全排列

    问题

    给定{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))
    	{
    		
    	}
    }
    
    
  • 相关阅读:
    HDU 1800 Flying to the Mars 字典树,STL中的map ,哈希树
    字典树 HDU 1075 What Are You Talking About
    字典树 HDU 1251 统计难题
    最小生成树prim算法 POJ2031
    POJ 1287 Networking 最小生成树
    次小生成树 POJ 2728
    最短路N题Tram SPFA
    poj2236 并查集
    POJ 1611并查集
    Number Sequence
  • 原文地址:https://www.cnblogs.com/miaomiaolan/p/13204398.html
Copyright © 2011-2022 走看看