Etual
全部博文(99)
2012年(3)
2011年(5)
2010年(4)
2009年(31)
2008年(56)
arrvin
wanjin3
道痞
songtao0
晓风凌殇
uijm
cynthia
czllong1
yehuiliu
zhouzhua
lelee007
OsAtNbZS
鹏怜鸿影
分类: C/C++
2009-07-07 21:50:14
/* * 用递归来实现全排列 */#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_SIZE 5char 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;}
上一篇:链表实现的队列
下一篇:最近的一些工作 - -
登录 注册