很水的DFS
7 1 2 3 4 5 6 7 8 1 2 3 5 8 13 21 34 0
1 2 3 4 5 6 1 2 3 4 5 7 1 2 3 4 6 7 1 2 3 5 6 7 1 2 4 5 6 7 1 3 4 5 6 7 2 3 4 5 6 7 1 2 3 5 8 13 1 2 3 5 8 21 1 2 3 5 8 34 1 2 3 5 13 21 1 2 3 5 13 34 1 2 3 5 21 34 1 2 3 8 13 21 1 2 3 8 13 34 1 2 3 8 21 34 1 2 3 13 21 34 1 2 5 8 13 21 1 2 5 8 13 34 1 2 5 8 21 34 1 2 5 13 21 34 1 2 8 13 21 34 1 3 5 8 13 21 1 3 5 8 13 34 1 3 5 8 21 34 1 3 5 13 21 34 1 3 8 13 21 34 1 5 8 13 21 34 2 3 5 8 13 21 2 3 5 8 13 34 2 3 5 8 21 34 2 3 5 13 21 34 2 3 8 13 21 34 2 5 8 13 21 34 3 5 8 13 21 34
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <limits.h>
#include <ctype.h>
#include <string.h>
#include <string>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <stack>
#include <deque>
#include <vector>
#include <set>
#include <map>
using namespace std;
#define MAXN 25
int num[MAXN];
int n;
int vis[MAXN];
int ans[10];
int mark;
void DFS(int i,int sum){
int j;
ans[mark++] = num[i];
if(sum == 6){
printf("%d %d %d %d %d %d\n",ans[0],ans[1],ans[2],ans[3],ans[4],ans[5]);
return ;
}
for(j=i+1;j<=n;j++){
DFS(j,sum+1);
mark--;
}
}
int main(){
int cas=1,i;
while(cin>>n){
memset(num,0,sizeof(num));
memset(vis,0,sizeof(vis));
if(n == 0){
break;
}
if(cas != 1){
printf("\n");
}
for(i=1;i<=n;i++){
cin>>num[i];
}
for(i=1;i<=n;i++){
if(n-i+1 >= 6){
vis[i] = 1;
mark = 0;
//ans[mark] = num[i];
DFS(i,1);
//vis[i] = 0;
}
}
cas++;
}
return 0;
}
原文:http://blog.csdn.net/zcr_7/article/details/41216953