深度优先搜索简单入门

将1-9填入 下面的 空格里,使得等式成立 

[ ][ ][ ]+[ ][ ][ ]=[ ][ ][ ]

#include
int a[10],book[10],ans;
void dfs(int step)
{
    int i;
    if(step==10)
    {
        if(a[1]*100+a[2]*10+a[3]*1+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9]*1)//判断是否相等如果相等输出
        {
            ans++;
            printf("%d%d%d+%d%d%d=%d%d%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]);
        }
        return ;
    }
    for(i=1; i<=9; i++)
    {
        if(book[i]==0)//如果step是空的,将i放到a[step]里
        {
            a[step]=i;
            book[i]=1;//
            dfs(step+1);//递归调用函数找出符合条件的数字
            book[i]=0;
        }
    }
    return ;
}
int main()
{
    dfs(1);//将第一步放到1那,从一开始
    printf("%d\n",ans/2);
    getchar();
}

你可能感兴趣的:(深度优先搜索简单入门)