全排列

原创 2012年03月29日 13:33:05
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int count = 0;
int perm(char*, int, int);
void Swap(char*, char*);
int judge(char*, int, int);
int main(void)
{
    char str[] = "aacc";
    printf("%d\n", perm(str, 0, strlen(str) - 1));
    return 0;
}
//perm[k, n]的全排列
int perm(char *array, int k, int n)
{
    int i;
    if (k == n)
    {
        ++count;
        printf("%s\n", array);
    }
    else
    {
        for (i = k; i <= n; ++i)
        {
            //如果从k -> (i - 1)有与i相同的就不需要换了
            if (judge(array, i, k))
            {
                Swap(&array[i], &array[k]);
                perm(array, k + 1, n);
                Swap(&array[i], &array[k]);
            }
        }
    }
    return count;
}
//交换两个字符型数据
void Swap(char *a, char *b)
{
    char temp = *a;
    *a = *b;
    *b = temp;
}
//判断从[k, (i - 1)]的元素中有没有与第i个相同的元素
int judge(char *array, int i, int k)
{
    int t;
    if (i > k)
    {
        for (t = k; t < i ; ++t)
        {
            if (array[t] == array[i])
            {
                return 0;
            }
        }
    }
    return 1;
}

相关文章推荐

重复元素全排列

  • 2013年10月10日 13:05
  • 5KB
  • 下载

全排列算法(java实现)

全排列算法(java实现)

全排列的生成算法

  • 2013年12月23日 10:19
  • 68KB
  • 下载

全排列(多种算法实现)

  • 2012年10月18日 17:03
  • 35KB
  • 下载

全排列(一)next_permutation方式实现

一、next_permutation方式实现 1、next_permutation函数简介 (1) 原理: 每个序列都对应一个数值(并非原理,只是一种理解方式,也可以当做是一个序列与数值的映射关系,数...
  • bxw1992
  • bxw1992
  • 2017年05月16日 10:54
  • 76

序数法全排列

  • 2012年03月11日 17:23
  • 13KB
  • 下载

全排列源代码

  • 2012年06月01日 12:37
  • 768B
  • 下载

Java与算法之(4) - 数字全排列

全排列是指n个数(或其他字符)所有可能的排列顺序,例如1 2 3三个数字的全排列是 1 2 3, 1 3 2, 2 1 3, 2 3 1, 3 1 2, 3 2 1 那么问题来了,任意输入一个大于1...
  • autfish
  • autfish
  • 2016年08月31日 16:29
  • 6751

全排列算法解析(完整版)

  • 2017年03月06日 13:44
  • 153KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:全排列
举报原因:
原因补充:

(最多只允许输入30个字)