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;
    }
  • 相关阅读:
    自制游戏Zombie代码
    HNOI2020总结
    20200615题解:继续扮演
    20200611题解:树网的核
    历次考试总结
    寒假总结和省选大体规划
    每日总结
    有一种感动叫ACM(记WJMZBMR在成都赛区开幕式上的讲话)
    递推求欧拉函数的最简单的详解
    总结一些好用的C++小技巧
  • 原文地址:https://www.cnblogs.com/sky-z/p/4405213.html
Copyright © 2011-2022 走看看