dfs填数问题

Posted 迪迪菜园

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dfs填数问题相关的知识,希望对你有一定的参考价值。

 

标题:六角填数 

  
    如图【1.png】所示六角形中,填入1~12的数字。使得每条直线上的数字之和都相同。

    图中,已经替你填好了3个数字,请你计算星号位置所代表的数字是多少?

技术分享技术分享

#include <iostream>
#include<cstdio>
using namespace std;
int a[13] = {0},v[13] = {0};
void juge()
{
    int b[6];
    b[0]=a[1]+a[3]+a[6]+a[8];
    b[1]=a[1]+a[4]+a[7]+a[11];
    b[2]=a[2]+a[3]+a[4]+a[5];
    b[3]=a[2]+a[6]+a[9]+a[12];
    b[4]=a[5]+a[7]+a[10]+a[12];
    b[5]=a[8]+a[9]+a[10]+a[11];
    for(int i = 1;i < 6; i++)
    {
        if(b[i] != b[i-1])
            return;
    }
     printf("%d\n",a[6]);
}
void dfs(int x)
{
   if(x == 1 || x == 2 || x == 12)
   {
       dfs(x+1);
       return;
   }
   if(x == 13)
   {
       juge();
   }
   for(int i = 1;i < 13;i++)
   {
       if(v[i] == 0){
           v[i] = 1;
           a[x] = i;
           dfs(x + 1);
           v[i] = 0;
       }
   }
}

int main()
{
    a[1] = 1;
    a[2] = 8;
    a[12] = 3;
    v[1] = 1;
    v[8] = 1;
    v[3] = 1;
    dfs(1);
    return 0;
}

采用v[]来标记已经经过的位置,给每个位置都排好序列。然后采用“固定”的dfs格式去写。


以上是关于dfs填数问题的主要内容,如果未能解决你的问题,请参考以下文章

01蓝桥杯第七届 方格填数(dfs)

个人项目——最后篇

DFS & BFS

python版蛇形填数

蛇形填数

每日一练第7天:蛇形填数