第一类:无视顺序
例如:给出数组{1,2,3,4}
要求输出
1
2
3
4
12
13
14
23
24
34
123
124
..............
#include <stdio.h>
int arr[] = {1,2,3,6,7};
int len = sizeof(arr)/sizeof(arr[0]);
int darr[1000];
int use[1000]={0};
int DFS(int n,int id)
{
int i;
for(i=0;i<len;i++)
{
if(use[i]||(i<darr[id-1]&&id>=1))
continue;
darr[id]=i;
use[i]=1;
if(id+1<n)
DFS(n,id+1);
else
{
int k;
for(k=0;k<n;k++)
printf("%d",arr[darr[k]]);
putchar('\n');
}
use[i]=0;
}
}
int main()
{
int n;
for(n=1;n<=len;n++)
{
int id=0,tmp;
for(tmp=0;tmp<len;tmp++)
darr[tmp]=arr[0];
DFS(n,id);
}
}
第二类:有顺序
例如:给出数组{1,2,3,4}
要求输出
1
2
3
4
12
13
14
21
22
23
24
31
.........
#include <stdio.h>
int arr[] = {1,2,3,4};
int darr[4];
int use[]={0,0,0,0};
int DFS(int n,int id)
{
int i;
for(i=0;i<4;i++)
{
if(use[i])
continue;
darr[id]=arr[i];
use[i]=1;
if(id+1<n)
DFS(n,id+1);
else
{
int k;
for(k=0;k<n;k++)
printf("%d",darr[k]);
putchar('\n');
}
use[i]=0;
}
}
int main()
{
int n;
for(n=1;n<=4;n++)
{
int id=0,tmp;
for(tmp=0;tmp<4;tmp++)
darr[tmp]=arr[0];
DFS(n,id);
}
}