题目:
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;
}


备份地址: 【深度优先算法—取特定的全排列