六角填数(DFS)
来源:互联网 发布:手机计步器软件排行 编辑:程序博客网 时间:2024/05/01 02:49
题目是這样的:
如图【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;}
0 0
- 六角填数(DFS)
- 蓝桥杯 2014预赛 六角填数 DFS
- 六角填数
- 六角填数
- 标题:六角填数
- 六角填数
- LQ_六角填数
- 六角填数
- 【蓝桥杯】【六角填数】
- 蓝桥杯 六角填数
- 1007-六角填数
- 蓝桥杯--六角填数
- 六角填数
- 六角填数
- 六角填数
- 六角填数
- 2014 六角填数
- 蓝桥杯 六角填数
- Leetcode 51. N-Queens
- [USACO1.3]混合牛奶 Mixing Milk
- C Primer Plus 知识点整理(一)
- Codeforces Round #397 E. Tree Fold(bfs,想法题,好题)
- 排队接水
- 六角填数(DFS)
- Easy单例模式
- 欢迎使用CSDN-markdown编辑器
- Codeforces Gym 100962 J. Jimi Hendrix
- 游戏开发时关于UGUI的一些控件无法使用的问题
- 八皇后
- Spark Streaming使用Kafka保证数据零丢失
- 死锁的产生
- 剑指offer经典编程(十三)