给出一个字符数组的全排列

简介:
#include <stdio.h>

char InputString[100];
char OutputString[100];
int MarkArray[100];
int StringLength;
int Number;

void processString( int cursor)
{
    int i=0;
    if(cursor==StringLength)
    {
        puts(OutputString);
        Number++;
        return;
    }

    while(i<StringLength)
    {
        if(MarkArray[i]==0)
        {
            MarkArray[i]=cursor+1;
            OutputString[cursor]=InputString[i];
            processString(cursor+1);
            MarkArray[i]=0;
        }

        i++;
    }

}


int main()
{
    int i=0;
    for(i=0;i<100;i++) MarkArray[i]=0;
    
    gets(InputString);
    
    StringLength=0;
    while(InputString[StringLength]!='\0'&&StringLength<100) StringLength++;
    OutputString[StringLength]='\0';
    
    processString(0);
    
    printf("Total:%d",Number);
    return 0;
}

说明:
递归算法,cursor表示游标,每次从输入的数组中读出一个字符,游标前进一,然后递归,当游标等于输入的数组的长度时,递归结束,输出结果。
本文转自冬冬博客园博客,原文链接:http://www.cnblogs.com/yuandong/archive/2006/08/16/478568.html ,如需转载请自行联系原作者
相关文章
|
C语言
【Leetcode-1.两数之和 -3.无重复字符的最长子串 -9.回文数(C语言)】
【Leetcode-1.两数之和 -3.无重复字符的最长子串 -9.回文数(C语言)】
41 0
|
8月前
|
C语言
每天一道C语言编程(4):字符串的逆序输出
每天一道C语言编程(4):字符串的逆序输出
122 0
|
8月前
|
存储 编译器 Linux
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
标准库中的string类(中)+仅仅反转字母+字符串中的第一个唯一字符+字符串相加——“C++”“Leetcode每日一题”
|
人工智能 容器
子数组的解释与专题
子数组的解释与专题
234 0
|
存储 算法
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
【LeetCode】每日一题&最后一个单词的长度&投票法求解多数元素&异或操作符巧解只出现一次的数字&整数反转
指针和字符数组笔试题及其解析(第二组)
指针和字符数组笔试题及其解析(第二组)
40 0
|
存储 算法 安全
算法训练Day9| 28. 实现 strStr();459.重复的子字符串;字符串总结 ;双指针回顾
算法训练Day9| 28. 实现 strStr();459.重复的子字符串;字符串总结 ;双指针回顾
字符串的全排列
字符串的全排列
86 0
|
C语言
C语言力扣简单题-无重复字符的最长子串
C语言力扣简单题-无重复字符的最长子串
137 0
|
C语言 C++ 容器
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法
算法库-全排列,递归全排列 auti()字符转为整型 stringstream用法