题目:
setA= {0,3,4,6,8};
setB= {1,2,5,7,9};
从集合A和集合B中分别取数字(不能只从一个集合取),共取3个数字。
打印所有结果。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int setA[6] = {-1,0,3,4,6,8};
int setB[6] = {-1,1,2,5,7,9};
int book[6];
int a[2];
int total;
//递归+深度优先算法
void dfs(int step, int setA[],int setB[])
{
if(step == 2)·
{
int i;
for(i=1;i<=5;i++)
{
printf("%d%d%d\n",setA[i],a[0],a[1]);
total ++;
}
return ;
}
int i;
for(i=1; i<=5; i++)
{
if(step == 0)
{
book[i-1]=1;
}
if(book[i]==0)
{
a[step] = setB[i];
book[i] = 1;
dfs(step+1,setA,setB);
book[i] = 0;
}
}
return;
}
int main(int args, char *argv[])
{
//用于输出重定向
if(args != 0 )
{
;
}
dfs(0,setA,setB);
printf("Total: %d",total);
printf("\n-------------\n");
//清空buffer Arrary
memset(book, 0, sizeof(book));
total = 0;
dfs(0,setB,setA);
printf("Total: %d",total);
return 0;
}
备份地址: 【深度优先算法—取特定的全排列】