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填数问题的主要内容,如果未能解决你的问题,请参考以下文章