Chinaunix首页 | 论坛 | 博客
  • 博客访问: 603653
  • 博文数量: 99
  • 博客积分: 5128
  • 博客等级: 大校
  • 技术积分: 1538
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-27 19:40
文章分类

全部博文(99)

文章存档

2012年(3)

2011年(5)

2010年(4)

2009年(31)

2008年(56)

分类: C/C++

2009-07-07 21:50:14

/*
 * 用递归来实现全排列
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_SIZE 5

char maze[MAX_SIZE]={'a','b','c','d','e'};
char disp[MAX_SIZE];
int mask[4];
int deep; // 深度

int count; // 计算总共多少个数


int char_sort(void)
{
    int i,p;
    // 全部为1表示列举完毕

    if ((mask[0]==1) && (mask[1]==1) && (mask[2]==1) && (mask[3]==1))
    {
        // 打印

        for (p=0;p<MAX_SIZE;p++)
            printf("%c",disp[p]);
        printf("\n");
        deep--;
        count++;
        return 1;
    }
    // 将待排列的数组里面的数据都理解一遍

    for(i=0;i<MAX_SIZE;i++)
    {
        // 如果已经标记了的表示已经抽取过

        if (mask[i])    continue;
            
        // 保存起来等待显示

        disp[deep]=maze[i];
        // 深度加1,表示现在操作下一个数

        deep++;
        
        // 已经抽取出来的数,要标记起来

        mask[i] = 1;
        // 递归调用

        char_sort();
        // 清除标志

        mask[i] = 0;
    }
    // 返回时,深度减去1

    deep--;
    return 0;
}

int main(int argc,char *argv[])
{
    char_sort();
    printf("Number : %d\n",count);
    return 0;
}


阅读(810) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~