首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

非递归结合算法

2012-12-22 
非递归组合算法order数组是栈指针,利用栈指针将递归问题转化为回溯的非递归问题#includestdio.h#include

非递归组合算法
order数组是栈指针,利用栈指针将递归问题转化为回溯的非递归问题

#include<stdio.h>#include<iostream>using namespace std;int getCombine(int*a,int* order,int m,int n){while(1){int flag=0;for(int i=1;i<=n;i++){if(i==n){if(order[i]==m)order[i]=order[i-1]+1;elseorder[i]++;}else{if(order[i]==(m-n+i)){while(i<=n){order[i]=order[i-1]+1;i++;}}else{if(order[i+1]==(m-n+i+1))order[i]++;}}}for(int j=1;j<=n;j++){if(order[j]!=(m-n+j)){flag=1;break;}}for(int j=1;j<=n;j++)cout<<a[order[j]];cout<<endl;if(flag==0)break;}}int main(){int m,n;cin>>m>>n;int *a;int *order;a=new int(m+1);order=new int(n+1);for(int i=1;i<=m;i++){a[i]=i;}for(int i=1;i<=n;i++){order[i]=i;}order[n]=n-1;getCombine(a,order,m,n);return 0;}

热点排行