简单深度优先题

题目:

使用1~9填满“口口口+口口口=口口口”且每个空中数字不重复

//口口口+口口口=口口口成立
#include<bits/stdc++.h>
using namespace std;
int a[10],book[10],total;
void dfs(int step){
    if(step>9){
        total++; 
        if(a[1]*100+a[2]*10+a[3]+a[4]*100+a[5]*10+a[6]==a[7]*100+a[8]*10+a[9])
        {    for(int i=1;i<=9;i++){
                if(i==4)
                    cout<<"+";
                if(i==7)
                    cout<<"=";
                cout<<a[i];
            }
            cout<<endl;
        }
    return;
    }
    
    for(int i=1;i<=9;i++){
        if(book[i]==0){
            a[step]=i;
            book[i]=1;
            dfs(step+1);
            book[i]=0;
        }
    }
    return;
} 
int main(){
    dfs(1);
    cout<<"total="<<total/2<<endl;//173+286=459和286+173=459算了两次,所以除以2 
}

出处:《啊哈!算法》第四章第1节

上一篇:【Tensorflow快速上手】手写数字识别现成代码每行都有注释、自定义损失函数、自定义训练步骤train_step、早停预防过拟合


下一篇:全世界都在用的常见动画效果,轮播图等