补全等式,利用DFS(深度优先搜索)完成。题目要求下图中,每个方块代表1…13中的某一个数字,但不重复。

    科技2022-07-20  99

    补全等式

    题目要求下图中,每个方块代表 1…13中的某一个数字,但不重复。 例如:1×2+9×7=13×5 10×8−12*3=11×4 只要有任意一个方块代表的数字不同,就算两种不同的方案。 请你计算,一共有多少种不同的方案。

    #include<iostream> #include<string.h> using namespace std; int a[12] = { 0 };//12个方形 int Count=0;//计数 bool visit[14] = { false };//判断13个数有没有被使用过,为了一一对应,定义14个bool void dfs(int depth) { //筛选条件 //1.除去不满足第一个等式的情况,降低运算规模 if (depth == 6 && a[0] * a[1] + a[2] * a[3] != a[4] * a[5]) return; //2.如果满足第一个式子,又填满了第二个式子则进行判断 if (depth == 12) { if (a[6] * a[7] + a[8] * a[9] != a[10] * a[11]) { Count++; return; } } //进行填补递归 for (int i = 1; i <= 13; i++) { if (!visit[i])//判断数字是否被使用 { //修改状态 visit[i] = true; a[depth] = i; dfs(depth + 1); //回复状态 a[depth] = 0; visit[i]= false; } } } int main() { dfs(0); cout << Count; return 0; } }
    Processed: 0.012, SQL: 8