zoukankan      html  css  js  c++  java
  • 蓝桥杯 六角形中填置1~12个数字 dfs

    如图【1.png】所示六角形中,填入1~12的数字。

    使得每条直线上的数字之和都相同。

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

    请通过浏览器提交答案,不要填写多余的内容。

    /*
    *将12个数字放置到12个位置中,深度搜索,暴力枚举的方法
    *每放置一个数字,检查之前所放置位置的数字是否出现重复
    *当恰好放置12个数字并且六个边的和相同打印出所有的数字 
    */
    #include<stdio.h>
    #include<string.h>
    int t[6];
    int num[12];
    void dfs(int cur){
    t[0]=num[1]+num[4]+num[7]+num[9];
    t[1]=num[2]+num[5]+num[4]+num[6];
    t[2]=num[1]+num[5]+num[8]+num[12];
    t[3]=num[6]+num[8]+num[11]+num[3];
    t[4]=num[9]+num[10]+num[11]+num[12];
    t[5]=num[2]+num[7]+num[10]+num[3];
    //恰好放置12个数字,+1为13 
    if(cur==13){
    //六个边的和恰好相同 
    if(t[0]==t[1] && t[1]==t[2] && t[2]==t[3] && t[3]==t[4] && t[4]==t[5] &&t[5]==t[0])
    //打印结果 
    for(int f=1;f<=12;f++)
    printf("%d ",num[f]);
    }
    //否则继续放置数字,从1开始逐个放置 
    else for(int i=1;i<=12;i++){
    //标记变量 
    int ok=1;
    for(int j=1;j<cur;j++){
    //检查当前放置的数字是否在此之前放置过 
    if(num[j]==i)
    ok=0; //如果放置过标记变量为0 
    }
    if(ok){
    //放置该数字 
    num[cur]=i;
    //进行下一步搜索 
    dfs(cur+1);
    }
    }
    }
    int main(){
    num[1]=1;num[2]=8;num[3]=3;
    dfs(4);
    return 0;
    }
  • 相关阅读:
    第10组 Alpha冲刺(4/4)
    python2中的新式类与经典类区别
    http请求Content-Type有几种
    2020 年软件设计师考试大纲
    11-Elasticsearch之-组合查询
    16-扩展阅读-摘录
    各种排序算法
    Vmware虚拟机三种网络模式详解(转载)
    无法访问 CentOS7服务器上应用监听的端口
    VsCode 常用插件清单
  • 原文地址:https://www.cnblogs.com/sky-z/p/4405213.html
Copyright © 2011-2022 走看看