先固定三个顶点,剩下的就是简单的DFS
#include<iostream>//先固定 三个顶点,由于不能镜像,旋转重复,只要保证选择的顶点不重复 就行,剩下的就是简单得dfs,答案位144.
using namespace std;
int sum=0,A=0,B=0,C=0;
int visited[10] = { 0 };
int arr[7] = { 0 };
void dfs(int k) {
if (k == 7) {//到了最后一层还多一层
int num_A = A + B + arr[1] + arr[2];
int num_B = B + C + arr[3] + arr[4];
int num_C = A + C + arr[5] + arr[6];
if (num_A == num_B && num_B == num_C) {//判断三条边之和是否相等
sum++;
}
}
else {
for (int i = 1; i <= 9; i++) {//DFS过程
if (!visited[i]) {
arr[k] = i;
visited[i] = 1;
dfs(k + 1);
visited[i] = 0;
}
}
}
}
int main() {
for (int i = 1; i <= 7; i++) {//选择三个顶点,由于数据量很小,采用三重循环
for (int j = i + 1; j <= 8; j++) {
for (int k = j + 1; k <= 9; k++) {
A = i;
B = j;
C = k;
visited[i] = 1;
visited[j] = 1;
visited[k] = 1;
dfs(1);
visited[i] = 0;
visited[j] = 0;
visited[k] = 0;
}
}
}
cout << sum;
return 0;
}
最终答案是144.