2016蓝桥杯C/C++省赛 寒假作业(深搜DFS)

题目:

2016蓝桥杯C/C++省赛 寒假作业(深搜DFS)_第1张图片

思路:

把这些空格分别用a[1]--a[12]来标记,然后填数深搜

代码:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
#define N 1000+10
#define LL long long
using namespace std;
int a[20],vis[20],sum=0;
void dfs(int x)
{
    if(x>=4&&a[1]+a[2]!=a[3])
        return;
    if(x>=7&&a[4]-a[5]!=a[6])
        return;
    if(x>=10&&a[7]*a[8]!=a[9])
        return;
    if(x>=13&&a[12]*a[11]==a[10])//能进行到这里,就证明以上的条件都满足了
    {
        sum++;
        return;
    }
    for(int i=1; i<=13; i++)//枚举要填的数
    {
        if(vis[i]==0)
        {
            a[x]=i;
            vis[i]=1;//搜过的标记
            dfs(x+1);
            vis[i]=0;//搜完取消标记
        }
    }
    return;
}
int main()
{
    dfs(1);
    cout<



你可能感兴趣的:(【搜索(DFS/BFS)】,【蓝桥杯】)