自己实现的非递归组合

来源:互联网 发布:java注解反射原理 编辑:程序博客网 时间:2024/05/17 01:10
#include <stdio.h>#include <string.h>#define MAXSIZE 100#define INVALID -1int Stack[MAXSIZE];void Combination(const char ch[],int nSize,int path);int main(int argc, char* argv[]){int i = 0;int len = 0;const char* chMatrix = "1234567";len = strlen(chMatrix);for (i=0;i<len;++i){Combination(chMatrix,len,i+1);}return 0;}void Combination(const char chMatrix[],int nSize,int path){int i,j;int begin = 0;int top = 0;int findit = 0;for (i=0;i<MAXSIZE;++i){Stack[i] = INVALID;}do {for (i=begin;i<(nSize-path+top+1);++i){Stack[top++] = i;if (top==path){break;}}if (path==top){for (i=0;i<top;++i){printf("%c",chMatrix[Stack[i]]);}printf("\n");}begin = Stack[--top]+1;Stack[top] = INVALID;} while (top!=-1);}